2014-02-28 41 views
0

假設現在我在master分支上,而當前提交的是c0。現在我做一個git branch fb並在master分支上做出2個更多的提交mc1mc2。之後,我做git checkout fb並做出承諾fc1並做git rebase master。現在fc1應該在mc1mc2之上。最後我做了git checkout mastergit rebase fb和git快速轉發。我對這個快速發展感到困惑,儘管我知道這是git做出的一個明智的決定。但是,根據rebase的定義,git應該將c0作爲兩個分支的共同祖先,所以它應該在fb之上再次應用mc1mc2 - 雖然我知道這將是一個愚蠢的舉動,但爲什麼不呢?這樣做?Git - 關於合併,重定位和快進的混淆

此外,在最後一步,git rebase fbgit merge fb會有所不同,因爲兩者都只是快進?如果我在這裏做git merge fb,那麼即使一個父母是另一個父母的祖先,新的承諾是否也有兩個父母?

回答

1

底墊之前:

Before the rebase

git rebase master後:

After <code>git rebase master</code>

因此mc2是共同的祖先,而不是c0。並且因爲mastermc2之後不包含任何提交,所以它可以被快速轉發。


您可以強制git merge到不行使用--no-ff選擇快進。它看起來是這樣,那麼:

After <code>git merge --no-ff fb</code>

+0

這部分是清晰的,那第二個問題? – Xufeng

+0

@旭楓究竟是哪一個? – TimWolla

+0

在這種情況下合併和重新組合會有所不同,哪一個更受歡迎? – Xufeng