合并两个提交,在这两个提交之间还有其他提交

7
我想要合并两个提交 - 这两个提交之间有一些提交。这些提交不会更改由提交1和提交6编辑的文件。这些提交还没有被推送。
这是否可能?
f68ffb5 commit 6
...
d294fac commit 1

好的,那就去做吧!你期望什么样的答案?提供的信息太少了,无法回答你的问题。这些提交是否位于不同的分支中?如果不是,你可以考虑使用 git rebase -i 命令来重新排序提交,然后将第1个提交和第6个提交合并。但是,如果没有更多的信息,这只是一种猜测。 - ckruczek
@ckruczek:对我来说,他的问题非常清晰,答案就像你所说的:rebase -i + 重新排序到162345 + 合并6on1。你能把这个评论改写成一个回答吗? - quetzalcoatl
1
当然我可以,但提交可能也来自不同的分支。但我会尽力而为。 - ckruczek
3个回答

3

对于同一分支的提交

# make sure you're on the proper branch
git checkout branch-with-commits

这很重要:在合并(squash)之前,您必须引用提交记录之前的记录。这里我们使用^来引用“之前”的记录。
# rebase to the commit before commit 1
git rebase -i d294fac^

一个编辑器窗口会打开,它很可能是vim,如果你不熟悉它,可以查看如何退出vim编辑器?

在这个列表中,提交是按相反顺序排列的(与git log不同):从最早的到最新的。

按以下方式重新排列行:

pick d294fac commit 1
squash f68ffb5 commit 6
pick <sha1> commit 2
pick <sha1> commit 3
pick <sha1> commit 4
pick <sha1> commit 5

# and if there are commits later that commit 6:
pick <sha1> commit 7
...

保存文档。Git现在为新提交1&6的消息打开一个新的编辑器窗口。也保存它。重派完成。


2

正如我在评论中提到的那样。您可以执行以下操作:

git rebase -i 然后重新排序提交,例如 162345612345,然后将它们压缩在一起以获得类似于 (1+6)2345 的历史记录。


1

如果提交1在HEAD之前6个提交,你可以使用git rebase。

git rebase -i HEAD~6

一个git窗口将会打开,其中包含6个提交并且解释了选项。您希望合并第6个提交和第1个提交,因此需要将第1个提交压缩到第6个提交中:

pick f68ffb5 commit 6
...
squash d294fac commit 1

另一个Git窗口将为您打开,以编辑提交信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接