说我的主分支中有一个错误的功能:
def foo(x):
return 1/x
git commit -a -m "foo is created"
我创建了一个名为bug
的新分支来调试它。
git checkout -b bug
我创建了一些用于调试的print语句,并提交:
def foo(x):
print x
return 1/x
git commit -a -m "print statements are added for debugging"
最后修复了错误。
def foo(x):
print x
if x == 0:
return None
return 1/x
git commit -a -m "foo bug is fixed"
现在我想用bug
来修改master
分支上的第二次提交,但我不想添加print语句(即第一次提交),所以我使用交互式rebase如下:
git rebase -i master
drop b2296f0 printing
pick 62beaa8 fixed
并且只选择第二次提交(即bugfix),但是我遇到了这个冲突:
def foo(x):
<<<<<<< HEAD
=======
print x
if x == 0:
return None
>>>>>>> 62beaa8... fixed
return 1/x
有没有办法让git获得正确的版本,而不是我手动删除所有调试打印语句?
答案 0 :(得分:3)
您的结帐和rebase目标应该是相反的方式。 rebase命令可以用“从我当前位置解除到指定提交的效果”的措辞来表达。
此外,由于您已经在功能/错误修复分支上,您可以忽略结帐,而只是做
git rebase -i master
并选择/压缩/修复所需的提交。完成后,您可以合并:
git checkout master
git merge bug
如果您想要在git树中保留分支,您可以合并特定的合并提交(而不是快进):
git merge --no-ff bug