Git rebase 一个简单的提交重新排序失败,没有做任何操作

Git rebase on a simple commit reorder fail without doing any action

我正在尝试重新排序 3 个提交。

我目前的状态是:

A -> B -> C

我想变基并开始:

A -> C -> B

(只是交换提交 BC

我运行命令git rebase -i A

我的编辑器打开了,我更改了已完成的选择并保存。 没有任何反应。

我注意到以下几点:

当我 运行 rebase 命令时,我的编辑器打开但我已经在终端中看到以下内容:

Successfully rebased and updated refs/heads/master.
rm: cannot remove `/path/to/git/repo/.git/rebase-merge': Directory not empty

即使在 运行 执行变基命令后我仍然没有做任何事情(我还没有在我的编辑器中编辑任何东西)。

我错过了什么?

乍一看可能不像,但这本质上是 How can I use gvim for svn commit messages under Windows? 的重复,也就是说,这是一个 vim/gvim 标志 and/or 设置问题。 (这个问题一般会出现在许多基于 GUI 的编辑器中,不仅仅是 gvim,但每个编辑器的解决方法取决于基于 GUI 的编辑器。)你告诉 Git 到 运行 gvim,并且 Git 这样做的方式是 gvim 将 "please edit this other file" 请求传递给它自己的一个单独实例。

发送请求后,Git 运行 的 gvim 说: "All done!" 它成功退出并且 Git 认为这意味着 "all done editing." Git 读取文件,这当然是 not 完成的——gvim 的一些 other 实例现在 运行ning,让你编辑指令文件 - Git 看到原始未更改的文件并执行无操作变基。

解决方法是指示 gvim Git 运行s 停留,等待请求的文件编辑完成。然后当 Git 运行 的 gvim 退出时,文件真正 完成,并且 Git 可以继续读取它。我不使用这个特定的编辑器和模式,所以不知道 -f 作为启动标志或 .vimrc 设置 (set guioptions+=f) 是否更好。

(旁白:删除目录失败是因为 gvim 在其中创建了一个 .swp 文件。)