2013-11-26 56 views
4

我已經(被提交按字母順序創建)Git:如何合併上游更改而不會導致合併提交?

origin/topic A-B-C-D-W-X 

topic   A-B-C-D-Y-Z 

有沒有辦法可以讓我的topic分支看起來像

A-B-C-D-W-X-Y-Z 

沒有引入合併提交?


通常我只是做

$ git checkout topic 
$ git fetch origin 
$ git merge --ff-only origin/topic 

但由於YZ都致力於WX,後快進將無法正常工作。

我懷疑有些聰明的墊底或採摘櫻桃可能的工作,但我不能換我 的頭周圍:{

回答

7

你可以嘗試:

git checkout topic 
git pull --rebase origin topic 

檢查有關重訂的fetch man page筆記選項。

我會推薦使用類似git-smart的東西,它會在可能的情況下快速前進(這會更快),如果不是,則會發生重新摺疊。如果您有任何變化,它也會隱藏本地更改,並給您提供已被拖動的遠程更改的摘要。

+0

這簡直太不可思議了......現在花時間真正理解它是如何工作的...... – naomik

+1

@naomik記住,你可以把Git看作只是一個提交後附註(代表引用和分支)的提交樹給他們。您只需複製/移動提交,並在重新綁定時重新應用便籤。 – 2013-11-27 04:15:08

0

這可能是也可能不是一個好的答案。從人的git合併:

--commit, --no-commit 
     Perform the merge and commit the result. This option can be used to 
     override --no-commit. 

     With --no-commit perform the merge but pretend the merge failed and 
     do not autocommit, to give the user a chance to inspect and further 
     tweak the merge result before committing. 
1

如果你已經有topic簽出,origin/topic獲取其跟蹤起源/主題(聽起來像你這樣做),你可以只:

git rebase 

我給mamapitufo一個投票。

2

作爲替代mamapitufo's answer,你也可以做到以下幾點,這將給你完全相同的結果:

git fetch origin 
git rebase origin/topic topic 

最後topic參數是可選的,如果你已經擁有它簽出。

+0

謝謝。我仍然不明白如何重新綁定一個較新的舊的分支,雖然真的有效......但也許我不明白其核心的基礎。如果你可以提供額外的解釋或可視化,那將是非常棒的^ ^ – naomik