簡體   English   中英

如何創建一個將 master 中的更改和從舊 master 分支出來的另一個分支中的更改都集成在一起的分支?

[英]How to make a branch that integrates both changes in the master and in another branch that was branched off of older master?

所以我在 GitHub 上做了一個 PR 合並到 master。 現在我有另一個 PR 需要一些時間來合並並且在第一個 PR 合並之前從 master 分支。

現在我想處理第三個 PR,但它必須從最新的 master 分支出來,並且還包括我提到的第二個 PR 中所做的更改(需要時間來合並)。

我想我需要從 master 分支,然后在新分支的頂部重新建立第二個 PR 的分支。 不確定這是否是正確的方法,或者如何准確地去做。

如何將最新版本的 master 以及未合並分支的更改集成到新分支中?

如何將最新版本的 master 以及未合並分支的更改集成到新分支中?

最簡單的事情是在第二個 PR 中創建一個新的分支和合並。

$ git checkout -b 3rdPR master
$ git merge 2ndPR

在第二個 PR 合並到 master 后,通過再次合並 master 到第三個 PR 來更新第三個 PR。

$ git checkout 3rdPR
$ git merge master

或者,將 3rdPR 重新設置在 master 之上。

$ git checkout 3rdPR
$ git rebase master

這將導致沒有所有中間更新合並的更清晰的歷史記錄。


更高級的做法是首先將您的第二個 PR 重新設置為 master。 無論如何,這是一個好主意,這意味着第二個 PR 在審查期間是最新的。 然后你可以簡單地分支出第二個 PR。

你有這個。

     G - H [2ndPR]
    /
A - B ----- F [master]
     \     /
      D - E

然后重新定位。

$ git checkout 2ndPR
$ git rebase master

              G1 - H1 [2ndPR]
             /
A - B ----- F [master]
     \     /
      D - E

(因為你已經推送了 2ndPR,你需要強制推送更新。不要使用--force ,使用git push --force-with-lease解釋在這里。)

現在在 2ndPR 上創建一個分支。

$ git checkout -b 3rdPR 2ndPR

              G1 - H1 [2ndPR][3rdPR]
             /
A - B ----- F [master]
     \     /
      D - E

還有一些關於 3rdPR 的工作。

                     J - K [3rdPR]
                    /
              G1 - H1 [2ndPR]
             /
A - B ----- F [master]
     \     /
      D - E

如果 2ndPR 更新...

                     J - K [3rdPR]
                    /
              G1 - H1 - L - M [2ndPR]
             /
A - B ----- F [master]
     \     /
      D - E

...您可以再次在 2ndPR 之上重新設置 3rdPR。

$ git rebase 2ndPR
                              J1 - K1 [3rdPR]
                             /
              G1 - H1 - L - M [2ndPR]
             /
A - B ----- F [master]
     \     /
      D - E

當 2ndPR 合並時...

                              J1 - K1 [3rdPR]
                             /
              G1 - H1 - L - M
             /               \
A - B ----- F --------------- N [master]
     \     /
      D - E

...將 3rdPR 重新設置為 master。

$ git rebase master
              G1 - H1 - L - M   J2 - K2 [3rdPR]
             /               \ /
A - B ----- F --------------- N [master]
     \     /
      D - E

這更復雜,但無論您更新分支的頻率如何,它都會導致更可控的更新過程、更准確的 QA 和更清晰的歷史記錄。 它確實需要對能夠可視化 Git 存儲庫的信心。

我想我需要從 master 分支,然后在新分支的頂部重新建立第二個 PR 的分支。 不確定這是否是正確的方法,或者如何准確地去做。

重新定位它可能需要與合並它一樣長的時間,並且如果操作不當可能會使事情變得更加困難。 如果有疑問,不要變基,只需合並。 如果出現問題,以后更容易撤消。

基本上,在您的情況下,要走的路(恕我直言)是轉到分支 PR2(需要很長時間才能合並的分支),創建一個名為 PR3 的新分支(您現在將處理的分支),然后結帳 PR3,然后......將master合並到PR3中。

是的。 我感覺到你的痛苦。 這就像將 PR2 合並到 master 中。 但是您最終將不得不合並 PR2 以掌握。 現在比以后更好。 在大多數情況下,您拖延的時間越長,沖突就越嚴重。

此外,您需要 PR3 對 PR2 和最新的主版本進行更改...然后您需要合並它們。 master轉PR2/3,PR2/3轉master,無所謂。 即使你rebase ,它仍然會以相同的沖突結束。 這是因為您需要來自兩個分支的內容,並且來自一個分支的內容更改與來自另一個分支的內容更改沖突。 如果您想要兩組更改,則必須解決沖突。

“擺脫”解決沖突的唯一方法是從最近的 master 啟動 PR3,然后手動遍歷 PR2 中的所有更改並手動重新應用它們作為 PR3 上的新提交(因此在 master 上,因為我們啟動 PR3在這個練習中的主人)。 執行此操作后(意思是:將每個更改復制到每個文件並將其粘貼到正確的位置,提交,進行下一個更改等),您最終將獲得 PR3 擁有最新的母版和來自 PR2 的更改...

...但實際上,您所做的只是手動進行了類似rebase的操作。 而且您手動解決了所有沖突。 所以你最終手動合並了 PR2->master,稱之為 PR3,然后沒有告訴 git 你合並了它並解決了所有問題。

所以。 嚴重地。 我建議:

  • 在 PR2 上創建分支 PR3
  • 結帳 PR3
  • 將 master 合並到 PR3 //A
  • 解決沖突 //B
  • 提交 //C
  • 在 PR3 上工作

作為獎勵,A+B+C 的結果是一個准備好的 PR 候選者,稱為“finally merge PR2 into master”

(還要注意,在上面的待辦事項列表中,PR2 或 master 沒有一個更新。它們保持不變。如果 A/B/C 出現問題,只需刪除 PR3 分支並重新開始)

暫無
暫無

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

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