我注意到我在运行git rebase --interactive
时默默地丢失了提交,所以我在一个简单的仓库中重新创建了这个问题进行测试。
我有四个提交,我想重新排序其中两个。这是我的开始提交:
55d4ca6 1 <-- origin/master
d70d325 2
b613c5b 3
2bd1177 4 <-- master
每次提交都独立于其他提交;他们都操纵不同的文件。我想重新排序提交以切换提交2和3.我将使用git rebase --interactive origin/master
执行此操作。运行该命令按照预期在vim窗口中提交我的提交:
pick d70d325 2
pick b613c5b 3
pick 2bd1177 4
我要交换提交2和3,所以我在vim中对它们重新排序:
pick b613c5b 3
pick d70d325 2
pick 2bd1177 4
我希望交换两个提交,如下:
55d4ca6 1
bf330a8 3
5c6f9af 2
7cb8db1 4
在实践中,我的一个提交已经完全消失了,我的回购留下了这个:
55d4ca6 1
7de7fb0 3
10fc3a7 4
我是否错误地使用rebase --interactive
?或者这是Git中的错误?
我使用的是最新的Window Git版本(1.9.5.msysgit.0)。在过去的几个月中,我已经注意到了这个问题,有几个Git版本。
编辑1:用文本替换vim和gitk图像。如果您想查看我所看到的内容,请查看原始问题修订版。
答案 0 :(得分:5)
由于快捷方式,我实际运行的命令是git rebase --interactive --preserve-merges origin/master
。在git rebase documentation的BUGS部分列出了一起使用这些命令并尝试重新排序提交。
BUGS部分的问题与我上面描述的问题完全相同,可能会更好地解释发生了什么。
答案:尝试使用rebase --interactive --preserve-merges
重新排序时,您将删除提交。不要将两者结合使用。