交互式变基:即使我不想,Git 也会合并提交

pet*_*zik 1 git git-interactive-rebase

如果不共享完整的存储库,这个问题有点难以描述,但我会尝试。

我意识到我在最后一次提交中犯了一个错误。我决定使用交互式变基来修复它。

git rebase -i @~~
Run Code Online (Sandbox Code Playgroud)

现在我进入 Vim,在其中更改第一行中的命令:

pick 80c90b55788 First commit message  <-- change 'pick' to 'edit'
pick 712be094f96 Second commit message
Run Code Online (Sandbox Code Playgroud)

Git 响应如下:

Stopped at 80c90b55788...  First commit message
You can amend the commit now, with
    git commit --amend 
Once you are satisfied with your changes, run
    git rebase --continue
Run Code Online (Sandbox Code Playgroud)

我修改了需要修复的发现(我删除了有问题的行)。然后我继续:

git add <file>
git commit --amend
git rebase --continue
Run Code Online (Sandbox Code Playgroud)

现在 git 检测到我编辑的文件中存在冲突。(连续的两行被删除 - 一行最初是在第二次提交中,另一行是我在上一步中删除的。)对我来说,这一步看起来是多余的,因为 Git 基本上做了正确的事情 - 它已经正确合并了更改。但它正在等待我上演改变。

在不对文件进行任何修改的情况下,我再次执行以下操作:

git add <file>
git commit --amend
git rebase --continue
Run Code Online (Sandbox Code Playgroud)

Git 回复:

Successfully rebased and updated refs/heads/mybranch.
Run Code Online (Sandbox Code Playgroud)

嘭!现在这两个提交合并为一个。结果包含两次提交的更改。使用第一个提交消息。

是什么原因?我只是想修改最后一次提交,并让 git 将第二次提交变基到它上面。

kni*_*ttl 5

如果在变基时发生冲突,则不得调用git commit --amend。解决冲突并实施更改后,请致电git rebase --continue

即使使用“编辑”操作,该git commit --amend步骤也是多余的。编辑时,调用git rebase --continue会自动修改当前正在编辑的提交。