您可以使用衍合做,在一個步:
git rebase --onto A C D
我只是測試這一點,適當的結果:
$ edit test.txt
$ git add .
$ git commit -mA
$ git checkout -b the_branch
$ edit test.txt
$ git commit -a -mB
$ git checkout master
$ git merge master the_branch --no-ff
$ edit test.txt
$ git commit -a -mD
從這裏,你有你所描述的情況。 然後:
$ git rebase --onto <SHA1-for-A> <SHA1-for-C> master
底墊從C(除外)提交掌握,到A. 我需要解決一些矛盾,因爲我修改了在B和d相同的地方,但我想你不會。
_D'
/
/
A_______C___D
\ /
\_B_/
文件約git rebase --onto
,這或多或少是您的情況: http://git-scm.com/docs/git-rebase
如果您有:
A_______C___D___F
\ /
\_B_/
,那麼你現在有:
_D'___F'_(master)
/
/
A_______C___D___F
\ /
\_B_/(the_branch)
從這裏,將master中的更改合併到分支中很容易。完全放棄提交F'
。
$ git checkout master # if you were not here already
$ git branch old_fix # if you want to be able to return to F' later
$ git reset --hard <SHA1-to-D'>
你上面的命令之後有:
(master)
/
_D'___F'_(old_fix)
/
/
A_______C___D___F
\ /
\_B_/(the_branch)
要合併主的更新到the_branch:
$ git checkout the_branch
$ git merge master
...和解決衝突。
太棒了,謝謝!我將來會使用它(如果我的合併更加小心,將無法正常工作)。請參閱@ terminus爲我所做的答案。我認爲它和你的答案達到了幾乎相同的結果。 – Jake 2010-12-15 00:53:11