2012-02-14 55 views
0

我剛剛做了一些新的更改。
接下來我做了git fetch,然後git merge origin/master HEAD被快速轉發。爲什麼合併而不是快進?

我繼續增加3個提交。
然後我重複過程git fetchgit merge origin/master
這一次,執行了合併。

所以,我做了git reset --soft HEAD^

現在又回到了舞臺前,我合併。
我檢查了文件改變(git status)都與我的本地提交不同。 但它的說法

On branch master 
Your branch and 'origin/master' have diverged, 
and have 3 and 1 different commit(s) each, respectively. 

我相信合併是因爲分支分歧。

爲什麼分支分歧?

如果我不想合併,是否有可能進行rebase(好像在快速前進)?

回答

2

由於有人對遙控器進行了更改,因此該分支不同。如果你這樣做

 
git pull --rebase 

它會重新分配你的工作分歧,並給你你想要的。

0

分支分歧,因爲有人推提交到遠程分支,然後你拿來他們當你git fetch

如果它只是一個快進,你可以這樣做:

git fetch 
git rebase origin/master 

git pull --rebase,但我更喜歡在分開的步驟中抓取和重新綁定。

它們都會快進並在分支頂部應用本地更改。

假設你從支鏈型基礎重建對同一遠程分支,衍合:

  • 擱置從你上次rebase或分支
  • 快進分支到遠程匹配您的所有本地提交分支
  • 將逐個應用您的本地提交。如果有衝突,它們會合並。如果他們不能合併,你必須手動編輯它們。

所以一個rebase不會搞砸了。當我跟蹤一個正在積極編輯的遠程分支並且我有幾個提交時,我更願意重新綁定,這樣我的更改全部位於提交列表的頂部。

+0

但合併發生隨機。大多數情況下,當我'混合起源/主'時,它會快速前進。 在這種情況下會發生變形嗎? – resting 2012-02-14 11:34:11

+0

當沒有任何東西需要合併時會發生快進,否則合併(所以它不是隨機的)。我更新了我的答案,以解釋如何在你的情況下使用rebase。 – 2012-02-14 11:41:30

+0

好吧..不知道爲什麼合併執行,而不是快進?我曾經認爲合併是因爲同一個文件在本地和遠程有不同的內容。但這次文件是不同的。 – resting 2012-02-14 11:51:23

相關問題