2011-08-26 288 views
172

我有一個項目的本地分支(「configUpdate」),我從別人的項目中分支出來,並且我已經完成了對它的一系列更改並希望合併他們對我的本地分支所做的更改。如何將遠程主機合併到本地分支

我已經試過

git pull --rebase origin configUpdate 

,但它並沒有抓住最新變化 - 我該如何合併兩個? (也可加分我做了什麼與pull --rebase命令?)

+0

的可能的複製[混帳:合併本地遠程分支(https://stackoverflow.com/questions/21651185/git-merge-a-remote-branch-locally) –

回答

61

我發現了它是:

$ git fetch upstream 
$ git merge upstream/master 
+6

所以,如果你還沒有弄明白,你的'pull --rebase'不起作用,因爲'origin'指向你的叉子。如果你做了'git pull --rebase upstream/master',它會起作用的。 –

+0

試試看:git merge origin/master – Chris

264

如何(假設您目前所分支的ConfigUpdate):

git fetch 
git rebase origin/master 

一言以蔽之:

  • git merge branchname從分支branchname獲取新的提交,並將它們添加到當前分支。如有必要,它會自動在頂部添加一個「合併」提交。

  • git rebase branchname從分支branchname獲取新的提交,並將它們插入到您的更改「下」。更確切地說,它修改了當前分支的歷史記錄,使其基於branchname的提示,並對其進行了任何更改。

  • git pull基本上與git fetch; git merge origin/master相同。

  • git pull --rebase基本上與git fetch; git rebase origin/master相同。

那麼,爲什麼要使用git pull --rebase而非git pull?這裏有一個簡單的例子:

  • 您開始研究一項新功能。

  • 當您準備推送您的更改時,其他開發人員已推送了多個提交。

  • 如果你使用git pull(它使用合併),除了自動創建的合併提交之外,您的更改將被新提交掩蓋。

  • 如果git pull --rebase相反,git會快進你的主人向上遊的,然後適用於頂部更改。

+0

我這樣做的正確的分支但我仍然可以看到我的本地文件和原始項目的遠程主分支之間存在差異(即使它說所有內容都是最新的!)也許我已經錯誤地設置了項目了?任何方式檢查? – Martyn

+0

@Martyn:差異應該是你的本地變化。製作遠程分支的另一個分支,並檢查該分支是否具有正確的文件內容。 – ZeissS

+1

我知道這是一箇舊的答案,但請注意,您可能更喜歡做一個MERGE而不是一個rebase。如果您稍後必須合併到已經進行了一些更改的遠程倉庫,則不需要進行重新分配。 –

27

切換到您當地的分行

> git的結帳的ConfigUpdate

合併遠程主你的分支

> GIT中底墊configupdate執行主

如果你有任何衝突,糾正它們併爲每個衝突的文件執行命令

> GIT中添加[文件路徑/ conflicted_file](例如git的添加應用程序/資產/ Java腳本/ test.js)

繼續變基

> git的變基--continue

+0

不要害怕用rebase而不用合併 花點時間調查一下如果你覺得這個問題有差距 –

+1

非常感謝。這個過程爲我工作。 – Fortisimo

9

混帳底墊中似乎沒有爲我工作。在git rebase之後,當我嘗試將更改推送到本地分支時,我不斷收到錯誤消息(「提示:由於當前分支的提示位於遠程對象的後面,因此更新被拒絕。」集成遠程更改(例如'git pull。 ..')在再次推動之前。「)甚至在git pull之後。最後爲我工作的是git merge。

git checkout <local_branch> 
git merge <master> 

如果你是一個像我這樣的初學者,這裏是一個關於git merge vs git rebase的好文章。 https://www.atlassian.com/git/tutorials/merging-vs-rebasing

相關問題