簡體   English   中英

Git Rebase主沖突

[英]Git Rebase master conflicts

我在將master重新編入分支時在分支上有一些沖突。

場景是:

分支關閉主節點,進行一些更改,然后提交表示的更改。 結帳主機,進行一些更改,提交所說的更改,結帳分支1。 嘗試重新設置主服務器-沖突。

現在,我還有其他開發人員以類似的方式工作。

主機在所有回購協議(包括Web服務器)上保持同步,我不希望更改主機的歷史記錄。

如果我解決了過去與某個點沖突的基准沖突,如果我結帳master並將其與分支合並-是否會更改master歷史-還是將這些沖突解決方案應用於所有合並工作中?

想象一下您當前的情況:

- A - B - C - D
   \          ^
    - X - Y   master
          ^
          branch1

運行git checkout branch1; git rebase master git checkout branch1; git rebase master會將提交從branch1移出,以便將它們應用於master分支的頂部:

              master
              v
- A - B - C - D
               \      
                - X - Y 
                      ^
                      branch1

這不會更改master ,但是會以兩種方式更改branch1

  1. 通過將提交X的父級從A更改為D您將更改提交X的ID,實際上,就Git而言,它現在是一個全新的提交(並且由於X具有新的ID, Y具有新的父級,因此Y也會獲得新的ID,依此類推(如果分支上有更多提交)。
  2. 您需要執行的任何沖突解決方案都會更改提交的內容。

如果您已經將branch1送到遠程存儲庫,則對它進行基礎化是一個非常糟糕的主意; 更改已經共享的歷史記錄只會導致問題。

假設您尚未推送branch1 ,則可以將其合並到master中 (使用git checkout master; git merge branch1 ),這將導致master快速轉發以提交Y 這為您提供了整潔的線性歷史記錄,而無需更改master

- A - B - C - D - X - Y
                      ^
                      branch1 AND master

如果您已經推送了branch1 ,則應避免重新設置基礎,而應使用合並(使用git checkout master; git merge branch1 ),這不會更改任何一個的歷史記錄,但會創建一個新的提交(此圖中標記為M )在master分支上:

- A - B - C - D - M
   \            / ^
    - X - Y - -   master
          ^
          branch1

如果您進行了基准調整,則無論您將基准轉換為哪個分支,都將更改存儲庫的歷史記錄。 這個想法是,當其他開發人員在您推動之后(從起源)拉出master時,他們的存儲庫也將是最新的。

需要明確的是:在重新定基時合並沖突不會更改主數據庫的歷史記錄。 重新合並為合並方法。

如果不想更改主服務器的歷史記錄,則不能將其作為合並方法進行重新設置。 默認的git合並行為應該對您來說很好,無論是否沖突。

git checkout master
git merge branch-1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM