2017-10-16 105 views

回答

-1

只是運行git merge,這就是這個命令的用途。

它會嘗試將YX的修改組合在一起。

1

如果你創建了一個分支,在master中修改代碼併合並(至少在這個部分)不變的分支,那麼代碼將不會回來。

Git是關於更改(「提交」)。如果您在已更改主控的相同位置合併了已更改部件的分支,則會收到通知並且合併已暫停。否則,更改是,合併

+0

我明白這一點。有沒有辦法克服這一點,除了愚蠢的複製粘貼? –

+1

假設我得到了你想要的東西,那完全不是git的目的。這將恢復主分支中的所有更改。分支並不意味着是備份快照。但是,您可以在兩個分支之間創建差異並創建還原提交。 – clemens321

+1

另一種方法是使用「git reset」,它會將分支引用更改爲任何其他提交。但要小心,這可能會刪除其他提交,並且如果您使用遠程存儲庫,則可能導致非轉發操作。 – clemens321

1

,當你最後運行git checkout master && git merge branch-X,Git會:

  1. 找到master當前尖端的合併基礎,並提交給該名branch-X做出決議;
  2. 運行兩個git diff s將基數與每個分支點進行比較;和
  3. 嘗試合併所得變更集,將此組合應用於合併基礎內容,以提出合併內容。

如果master側的變化包括刪除一些套系Y的,這是一個輸入步驟3.有沒有辦法避免它成爲一個輸入步驟3

除非您使用不同的合併策略 - 合併策略具有完全控制權,因此可以修改上述三個步驟中的任何一個或全部,或者甚至可以消除部分或全部這些步驟 - 您現在可以做的唯一事情就是爲災難做好準備在步驟3期間:

  • 讓自己(或合併的人)記錄。例如,用一條喊出來的線替換被刪除的線:「在合併後把這些東西放回原處。」
  • 嘗試安排一個合併衝突,通過確保將來的任何提交將是branch-X的提示將包含對同一組行的更改。

這樣做會有最高的成功機率,因爲誰合併(你或別人)會看到警告的警告。但請注意,這兩個準備步驟可能會被未來的其他人撤銷,在未來的某個時間git merge之前。沒有什麼可以做,以防止這種情況。


凡實際運行git merge,在未來,有這個控制,通過git merge -s <strategy-name>。然而,在目前以及我認爲可以預見的將來,並不是神奇的合併策略,無論如何它都會做你想要的。所以這也沒什麼幫助。

+0

謝謝!它是我想要做的。 –

+0

儘管如此,你可能會更好地服務於不同的策略(不是「合併策略」,而是整體使用Git):不是提交'master'來刪除一堆行,而是創建一個新分支'刪除了一堆線。保持'master'原樣,並使用'for-now'來部署,直到你認爲事情已經準備好。 – torek

+0

是的,我結束這種情況的唯一原因是因爲我們有一羣人同時寫功能,然後2個月後,決定刪除其中一個。到那時已經有一個巨大的承諾,它似乎更容易從主人身上移除它。但事實證明,另一個功能需要這個工作,並出現在X分支,當X需要回到主 - 爆炸 –