选择要与 master 合并的提交

Picking the commits to merge with master

假设我的 master 分支中有一个 buggy 函数:

def foo(x):
   return 1/x
git commit -a -m "foo is created"

我创建了一个名为 bug 的新分支来调试它。

git checkout -b bug

我创建了一些用于调试的打印语句,并提交:

def foo(x):
    print x
    return 1/x
git commit -a -m "print statements are added for debugging"

Bug 终于修复了。

def foo(x):
    print x
    if x == 0:
       return None
    return 1/x
git commit -a -m "foo bug is fixed"

现在我想用 masterbug 分支上的第二次提交变基,但我不想添加打印语句(即第一次提交),所以我使用交互式变基如下:

git rebase -i master

drop b2296f0 printing
pick 62beaa8 fixed

并且只有 select 第二次提交(即错误修复),但是我遇到了这个冲突:

def foo(x):
<<<<<<< HEAD
=======
    print x
    if x == 0:
        return None
>>>>>>> 62beaa8... fixed
    return 1/x

有没有办法让 git 获得正确的版本,而无需我手动删除所有调试打印语句?

你的 checkout 和 rebase 目标应该反过来。 rebase 命令可以用措辞表达 "unwind from my current position up to the commit specified".

此外,由于您已经在 feature/bugfix 分支上,您可以忽略结帐,而只是

git rebase -i master

和 pick/squash/fixup 所需的提交。完成后您可以合并:

git checkout master git merge bug

如果您希望将分支保留在 git 树中,您可以合并特定的合并提交(而不是快进):

git merge --no-ff bug