压缩提交出错



假设我已经推送了两个提交,我想要压缩它们。

不做git rebase -i HEAD~2,我不小心做了git rebase -i HEAD~3

这里的最后第三次提交来自其他人,但它会显示在我的PR中,并说"其他作者和R11G提交"。如何避免这种情况?

如何挽回这个失误?有任何命令可以逆转或修复这个问题吗?

这似乎不是git的问题,但无论您使用的是什么源代码管理工具,都可以创建PR。

我原来的分支(与--format=fuller):

commit 18cabfe932ad37e210bebf14c3c5084f65629962 (HEAD -> master)
Author:     Sam Varshavchik <mrsam@courier-mta.com>
AuthorDate: Thu Jul 14 20:09:48 2022 -0400
Commit:     Sam Varshavchik <mrsam@courier-mta.com>
CommitDate: Thu Jul 14 20:09:48 2022 -0400
Commit 3
commit 4a12c468a08fcb17945ca08aa2032594f6988724
Author:     Sam Varshavchik <mrsam@courier-mta.com>
AuthorDate: Thu Jul 14 20:09:24 2022 -0400
Commit:     Sam Varshavchik <mrsam@courier-mta.com>
CommitDate: Thu Jul 14 20:09:24 2022 -0400
Commit 2
commit ff0b2a68da3c22179279ef2b009616f659f4ffd1
Author:     Sam Varshavchik <mrsam@courier-mta.com>
AuthorDate: Thu Jul 14 20:09:02 2022 -0400
Commit:     Sam Varshavchik <mrsam@courier-mta.com>
CommitDate: Thu Jul 14 20:09:02 2022 -0400
Commit 1
commit 5f9cf33419421f45313ccec60dad105337de4d6f
Author:     Sam Varshavchik <mrsam@courier-mta.com>
AuthorDate: Thu Jul 14 20:08:31 2022 -0400
Commit:     Sam Varshavchik <mrsam@courier-mta.com>
CommitDate: Thu Jul 14 20:08:31 2022 -0400
Initial commit

执行rebase后,只压缩最后两次提交:

$ history
...
1003  git rebase -i HEAD~3
1004  git log --format=fuller
1005  history

最终结果:

commit 544d3deeeea682b195f64421b8ef33b2e91043da (HEAD -> master)
Author:     Sam Varshavchik <mrsam@courier-mta.com>
AuthorDate: Thu Jul 14 20:09:24 2022 -0400
Commit:     Sam Varshavchik <mrsam@courier-mta.com>
CommitDate: Thu Jul 14 20:10:26 2022 -0400
Commit 2
Commit 3
commit ff0b2a68da3c22179279ef2b009616f659f4ffd1
Author:     Sam Varshavchik <mrsam@courier-mta.com>
AuthorDate: Thu Jul 14 20:09:02 2022 -0400
Commit:     Sam Varshavchik <mrsam@courier-mta.com>
CommitDate: Thu Jul 14 20:09:02 2022 -0400
Commit 1
commit 5f9cf33419421f45313ccec60dad105337de4d6f
Author:     Sam Varshavchik <mrsam@courier-mta.com>
AuthorDate: Thu Jul 14 20:08:31 2022 -0400
Commit:     Sam Varshavchik <mrsam@courier-mta.com>
CommitDate: Thu Jul 14 20:08:31 2022 -0400
Initial commit

在这里可以看到"提交1",第三古老的提交,是完全不变,仍然有相同的哈希。

git rebase是聪明的。如果它看到拉入rebase的初始提交集没有被修改,无论如何,rebase只从第一个修改的提交开始。

你需要看看你的SCM,以确定为什么它在你的PR中包含另一个提交。

如果你不能弄清楚为什么你的SCM正在做它正在做的事情,以及该怎么做:注意你幸存的提交的哈希,取消分支,创建一个新的分支,cherry-pick孤儿提交,并尝试做另一个PR。