我怎样才能将两个提交合并成一个?

我试图将2个提交合并为1,因此我遵循git准备好的“用rebase压缩提交”。

我跑了

git rebase --interactive HEAD~2

在最终的编辑器中,我将picksquash ,然后save-quit,但rebase因错误而失败

如果没有以前的提交,不能“压扁”

现在我的工作树已经达到这个状态,我无法恢复。 命令git rebase --interactive HEAD~2失败

交互式重新分配已经开始

git rebase --continue失败

如果没有以前的提交,不能“压扁”


回到你开始的地方

$ git rebase --abort

说你的历史是

$ git log --pretty=oneline
a931ac7c808e2471b22b5bd20f0cad046b1c5d0d c
b76d157d507e819d7511132bdb5a80dd421d854f b
df239176e1a2ffac927d8b496ea00d5488481db5 a

也就是说,a是第一次提交,然后是b,最后是c。 在提交c之后,我们决定一起压缩b和c:

运行git rebase --interactive HEAD~2给你一个编辑器

pick b76d157 b
pick a931ac7 c

# Rebase df23917..a931ac7 onto df23917
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

将b的pick改为squash会导致你看到的错误,但是如果你想将c压缩到b中(更新到更老的),可以将文本改为

pick   b76d157 b
squash a931ac7 c

并保存 - 退出你的编辑器,你会得到另一个编辑器的内容是

# This is a combination of 2 commits.
# The first commit's message is:

b

# This is the 2nd commit message:

c

保存并退出时,编辑文件的内容将成为新组合提交的提交消息:

$ git log --pretty=oneline
18fd73d3ce748f2a58d1b566c03dd9dafe0b6b4f b and c
df239176e1a2ffac927d8b496ea00d5488481db5 a

如果有多个提交,你可以使用git rebase -i将两个提交压缩成一个。

如果只有两个要合并的提交,并且它们是“最近的两个”,则可以使用以下命令将两个提交合并为一个:

git reset --soft "HEAD^"
git commit --amend

首先你应该检查你有多少次提交:

git log

有两种状态:

一个是只有两个提交:

例如:

commit A
commit B

(在这种情况下,你不能使用git rebase来做),你需要做下面的事情。

$ git reset --soft HEAD^1

$ git commit --amend

另一个是有两个以上的提交; 你想合并提交C和D.

例如:

commit A
commit B
commit C
commit D

(在这种情况下,你可以使用git rebase)

git rebase -i B

而不是用“南瓜”来做。 其余的部分很简单。 如果您仍不知道,请阅读http://zerodie.github.io/blog/2012/01/19/git-rebase-i/

链接地址: http://www.djcxy.com/p/549.html

上一篇: How can I merge two commits into one?

下一篇: How to modify a specified commit in git?