簡體   English   中英

當我使用 Git 時,我應該在合並之前重新設置基准嗎?

[英]When I am using Git, should I rebase before I merge?

我正在從事一個大型 Rails 項目,與我合作的團隊正在使用 Github 來管理該項目。 雖然許多更改在本地進行,然后直接推送到我們的開發分支,但當我們要處理非常大的更改時,我們會創建一個分支。 當需要將該分支合並回 develop 時,我經常嘗試在將我的功能分支合並到 develop 之前將 develop 變基回我的功能分支(以防止覆蓋其他人的工作)。 我發現當我這樣做時,我似乎兩次遇到相同的合並沖突。 我在變基時遇到了整個沖突列表,然后在合並時再次遇到了相同的沖突列表。 在將我的功能合並到開發之前,我應該將開發重新設置到我的功能分支中,還是應該將我的功能合並到開發中?

假設我的功能分支稱為“new_feature”。 我將它與“開發”分支合並的過程是這樣的:

git checkout develop 

git pull (this is set up on our rig to always pull rebase)

git checkout new_feature 

git rebase develop 

(lots of merge conflicts ensue) 

git checkout develop  

git merge -no-ff new_feature 

(same set of merge conflicts again)

就好像時間線從我的 rebase 更改導致我的新功能分支一路向后發展鏡像,然后與自身的偽副本發生沖突。

好的,現在這個評論太長了。

解釋手冊( git help rebase

   Assume the following history exists and the current branch is "new_feature":

                 A---B---C new_feature
                /
           D---E---F---G develop


   From this point, the result of either of the following commands:

       git rebase develop
       git rebase develop new_feature

   would be:

                         A'--B'--C' <new_feature
                        /
           D---E---F---G <develop

現在,如果你有沖突,首次運行rebase后的實際狀態將是

              A'--B'--C'--[local state]
             /        ^
D---E---F---G          new_feature
            ^ develop

其中[local state]是您尚未解決的沖突合並。 一旦解決了合並沖突並將已解析的文件添加到索引中,就運行git rebase --continue :現在你的狀態將是

              A'--B'--C'--H <new_feature
             /
D---E---F---G <develop

顯然,此時將new_feature合並到develop上可以像這樣快速轉發:

              A'--B'--C'--H <new_feature  <develop
             /
D---E---F---G

但如果不是,你會得到這個

              A'--B'--C'--H <new_feature
             /             \
D---E---F---G---------------I <develop

從時間軸的角度來看,無論你喜歡哪一個,都不明白為什么要么有問題......除非你從未完成了rebase並解決了與H的沖突,但我認為git會抱怨這一點。

聽起來像你正在向后使用rebase但它可能只是一個令人困惑的措辭。

我變基的特性分支開發,然后(在開發)做一個git merge --ff-only feature

  1. 重新設置您的功能分支,合並它,完成。 在我看來,“在合並之前重新設置功能分支”是最佳實踐。

  2. 永遠不要重新開發開發,永遠不要修改主干的歷史記錄(除非您和您的團隊知道自己在做什么)。

  3. Rebase 只是一系列的挑選,從分支的開頭開始。 當你 rebase develop 到 feature 分支時,你實際上把所有的 develop 提交放在了 feature 分支之上,這沒有任何意義。

  4. 在合並功能分支后繼續你的工作時,只需從 develop 啟動一個新分支,你就可以開始做下一件事情了。

由於你在同一個問題中指定了“大規模”和“變基”,我建議你不要這樣做。 請改用合並。

在合並中使用--no-ff非常適合保留原始分支點。 我支持使用它。

暫無
暫無

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

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