我试图合并2个提交为1,所以我遵循“压缩提交与rebase”从git就绪。

我跑

git rebase --interactive HEAD~2

在结果编辑器中,我将pick更改为squash,然后save-quit,但由于出现错误,重基操作失败

没有之前的提交就不能“squash”

现在我的工作树已经达到了这个状态,我很难恢复。

命令git rebase——interactive HEAD~2失败:

交互式改基已经开始

git rebase -continue失败

没有之前的提交就不能“squash”


当前回答

假设你在自己的主题分支里。如果你想把最后两个提交合并成一个,看起来像一个英雄,就在你做最后两个提交之前分支提交(使用相对提交名称HEAD~2指定)。

git checkout -b temp_branch HEAD~2

然后在这个新分支中挤压提交另一个分支:

git merge branch_with_two_commits --squash

这将带来改变,但不会导致改变。所以只要承诺就行了。

git commit -m "my message"

现在您可以将这个新的主题分支合并回您的主分支。

其他回答

你可以用

git rebase --abort

当你再次运行交互式rebase命令时,'squash;Commit必须在列表中选择Commit的下面

假设你在自己的主题分支里。如果你想把最后两个提交合并成一个,看起来像一个英雄,就在你做最后两个提交之前分支提交(使用相对提交名称HEAD~2指定)。

git checkout -b temp_branch HEAD~2

然后在这个新分支中挤压提交另一个分支:

git merge branch_with_two_commits --squash

这将带来改变,但不会导致改变。所以只要承诺就行了。

git commit -m "my message"

现在您可以将这个新的主题分支合并回您的主分支。

让我给你一个更简单的方法,

你可以做以下事情,而不是深入到GIT的深层概念中去,并为编辑的螃蟹而烦恼;

假设您从master创建了一个名为bug1的分支。向bug1提交2次。使用这些更改只修改了2个文件。

将这两个文件复制到文本编辑器中。结账的主人。粘贴文件。提交。

那么简单。

如果你想把几个提交压缩在一起,你可以使用交互式的rebase方法。(谢谢小麦教我这些!)

Git rebase origin/develop -i 然后你只需在你想要压缩的提交前写一个's',让它们卷到主提交中

在git rebase交互模式(vim)下的提示:

导航到要修改的提交行 (ESC) ciw -(改变内部单词)将改变光标下的整个单词。 输入你想做的,例如s表示压扁 (ESC) wq写得挺,你就搞定了。

然后git push -f

因为我对几乎所有的东西都使用git,所以对我来说,即使在这里这样做也是很自然的。

假设我签出了branchX,在它的顶端有两个提交,其中我想创建一个合并它们内容的提交,我这样做:

git checkout HEAD^ // Checkout the privious commit
git cherry-pick --no-commit branchX // Cherry pick the content of the second commit
git commit --amend // Create a new commit with their combined content

如果我想更新branchX以及(我认为这是这个方法的缺点),我也必须:

git checkout branchX
git reset --hard <the_new_commit>