您可以使用衍合做,在一个步:
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