Git: “Cannot 'squash' without a previous commit” error while rebase
1 2 3 4 5 6 | pick 56bcce7 Closes #2774 pick e43ceba Lint.py: Replace deprecated link # Rebase 684f917..e43ceba onto 684f917 (2 command(s)) # ... |
现在,当我尝试挤压第一个(
1 | Cannot 'squash' without a previous commit |
有人可以解释我的意思吗,我该怎么做?
我要压扁第一个提交(
Interactive rebase按与使用
-
git rebase -i HEAD~3 (如果您想将56bcce7 压入684f917 ) -
如果您打算将
56bcce7 与e43ceba 组合在一起,并且e43ceba 不依赖于56bcce7 ,则只需对其重新排序:1
2r e43ceba Lint.py: Replace deprecated link
s 56bcce7 Closes #2774更新:古斯的答案在下面提出了一种更好的方法,而无需重新排列两个提交:
1
2r 56bcce7 Closes #2774
s e43ceba Lint.py: Replace deprecated link这会将两个提交压缩/合并为一个。当交互式rebase要求为
56bcce7 提供改写的提交消息时,请提供描述56bcce7 和e43ceba 的并集的提交消息。
我有一个类似的问题,我如下解决:
这是我要压缩的提交组:
1 2 3 4 5 6 7 | 1 s 01cc5a08 Removes open div 2 s a2b6eecf Restores old fonts 3 s 603479ff Cleans left out div 4 pick 5afdbc33 Update: show logo on landing page 5 s 04c1cb13 change version of dev and prod from 1 to 2 6 s bbe6a8f8 Update: show logo on landing page if they have one 7 s c0d6008a Adds check for C users |
如您所见,我不想。 4,但是1、2和3之前没有承诺要挤入。因此,如果没有先前的提交错误,则不能"压扁"。
我的解决方案是对
所以我的提交列表看起来像这样:
1 2 3 4 5 6 7 | 1 r 01cc5a08 Removes open div 2 s a2b6eecf Restores old fonts 3 s 603479ff Cleans left out div 4 s 5afdbc33 Update: show logo on landing page 5 s 04c1cb13 change version of dev and prod from 1 to 2 6 s bbe6a8f8 Update: show logo on landing page if they have one 7 s c0d6008a Adds check for C users |
保存后,交互式外壳程序要求我重新输入所选提交的内容。
在那之后,我的提交日志产生了一个提交,从而产生了更清晰的提交历史。
我遇到了这个问题,之所以发生在我的案例中,是因为您不能将较早的提交压缩为新的提交。这是一个示例,说您有3次提交:
1 2 3 | 1 pick 01mn9h78 The lastest commit 2 pick a2b6pcfr A commit before the latest 3 pick 093479uf An old commit i made a while back |
现在,如果您说
1 2 3 | 1 pick 01mn9h78 The lastest commit 2 s a2b6pcfr A commit before the latest 3 s 093479uf An old commit i made a while back |
这将导致错误:
error: cannot 'squash' without a previous commit
You can fix this with 'git rebase --edit-todo' and then run 'git rebase --continue'.
Or you can abort the rebase with 'git rebase --abort'.
解决方案:
压缩提交时,您应该将最近的提交压缩到旧的提交中,而不是相反,因此在示例中将是这样的:
1 2 3 | 1 s 01mn9h78 The lastest commit 2 s a2b6pcfr A commit before the latest 3 pick 093479uf An old commit i made a while back |
如果您想要所有提交消息,这将很好地工作,我建议使用修正而不是壁球。
最好只是在包含提交的交互式编辑器中说,git总是从底部到顶部压缩,并且应该在顶部保留一个" pick"条目以接收来自下方的南瓜。
我现在也已经遇到了这个问题,这很粗心。您可以解决下一个问题:当您尝试压缩第一个(56bcce7)并选择第二个时,应在第二行之前添加" s",但是不是第一个。您还可以参考下一个网站:http://backlogtool.com/git-guide/en/stepup/stepup7_5.html