2012-09-12 84 views
3

我有三個分支:master,task_one和task_two。我想提取其他人提供的所有更新,並將這些更新應用於我的所有工作。Git rebase master和多個分支

什麼是正確的命令?

+0

你想要什麼作爲最終結果,即在你本地的git repo上,哪些分支會發生什麼變化。例如,你是否想要遠程更改加上本地主分支中的所有task_one和task_two更改,或者是否只需要在本地應用每個對應分支的遠程更改 –

回答

3

由於潛在的合併衝突,沒有什麼好方法可以自動「更新所有內容」。因爲這意味着沒有什麼好方法可以簡單地「始終保持最新」,下一個要回答的問題是:爲什麼你需要更新?

如果你需要他們的代碼審查,然後

git remote update 

其次

git log refs/remotes/<remote-name>/<branch-name> 

將讓你檢查哪些其他人發送的提交。

如果您想要將它們與您所做的更改(您提到重新綁定)進行整合,那麼您只需在實際完成分支工作之前獲取更改。所以,一旦你檢查了你想要工作的分支(並且假設你已準備好在此刻集成更改 - ,請不要無理由整合!當你準備好時集成!

git pull --rebase <remote-name> <remote-branch-name> 

將從< remote-name>獲取< branch-name>,然後重新綁定它。它實際上是一個快捷方式(並且是等同於)運行:

git fetch <remote-name> <remote-branch-name> && 
git rebase <remote-branch-name> 

您還可以設置默認的上游遠程對於任何給定的分支,這將允許/支您只需鍵入

git pull --rebase 

在將來。這對於長時間運行的主題很有用。要設置默認值,使用:

git branch --set-upstream <local-branch-name> <remote-name>/<remote-branch-name> 

總之,這就是:

  • git的結帳<分支>
  • 混帳拉--rebase <遠程名> <遠程分支名稱>

對於每個分支你想更新,與通常建議不要簡單地通過每一個分支,直到你實際上準備好做它的工作。

如果正在積極開發「主人」,「遠程主人」正在積極開發(應重新組合),而「task_one」和「task_two」則以「主人」爲基礎,而不是直接基於「遠程主控」,它可能是有意義的,只能拉 - 從「主」,而不是任何任務分支的基礎,而是重新設置在主高層之上,而不是。例如:

  • git的結帳主
  • 混帳拉--rebase <遠程>主
  • git的結帳<任務分支>
  • git的重訂主

但實際上,混帳拉--rebase < remote> master,與偶爾的git rebase master混合在一起,很可能會「做正確的事情」,這取決於你的歷史的複雜性。不要依賴它,但要注意可能性。瞭解「git patch-id」和「git rebase」是如何相互作用的,以及如何在合併之前使用「git rebase」進行合併,然後根據您的工作流程爲您節省幾個步驟。

1

我就從主創建新的本地分支「merge_work」:git checkout -b merge_work

然後合併task_one:git merge task_one

然後,我會解決任何衝突,然後合併task_two git merge task_two再次修復衝突。

一旦這是所有做搬家掌握git checkout master

合併merge_work:git merge merge_work

注:這是假設所有的分支機構都已經當地。