【问题标题】:Git / Github : Commit got lostGit / Github:提交丢失了
【发布时间】:2026-01-10 14:25:01
【问题描述】:

这是发生的情况(我想这就是我的问题出现的原因,但不是 100% 肯定):

  • 有人发送了 PR,我确实合并了它,但后来我使用 Github revert 按钮将其还原
  • 他用相同的 Commits 做了另一个 PR(加上一个来纠正错误)
  • 我合并了它(使用 Github merge 按钮)
  • 在第一次 PR 时恢复的提交已从主存储库中消失!

为什么会这样?现在怎么可能,从进行 PR 的分支中,它说 There isn't anything to compare 尽管这些提交不在远程仓库的原始分支上..

最后,我怎样才能恢复这些提交?

编辑:根据要求,这是我的git log 的有趣部分:

* | |   25f28fb Merge branch 'FooUser-develop' into develop
|\ \ \
| * \ \   73768b7 Merge branch 'develop' of https://github.com/FooUser/mainRepo into FooUser-develop
| |\ \ \
| | * | | 2e61235 Invert adresses
* | | | |   d522031 Merge branch 'develop' of https://github.com/mainUser/mainRepo into develop
|\ \ \ \ \
| |/ / / /
|/| | | |
| * | | |   1e6e61b Merge pull request #946 from mainUser/revert-945-develop
| |\ \ \ \
| | * | | | 6767f03 (origin/revert-945-develop) Revert "Corrections"
| |/ / / /
| * | | |   5ccc9cd Merge pull request #945 from FooUser/develop
| |\ \ \ \
| | |/ / /
| | * | | 6e0c08b Corrections structuration
| | * | | f7ade9b Correction
| | * | | 4844437 Nb to Str
| | * | | 1729a83 Fix adress
| | * | | ceab88d Corrections: @ssert
| | * | | a3c8d1a #891 Fix
| |/ / /

我显然丢失了大部分第一次提交(例如#891 Fix)。

再搜索一下,我发现例如我在a3c8d1a中添加的一些文件(第一次提交)73768b7中正确合并(倒数第二个) - 由于 Revert,他们不仅在 d522031 上消失了 - 但随后在 25f28fb 消失了(最后一个)

编辑 2: 我认为问题是因为分叉不同步(当我接受他的 PR 然后恢复它时,他没有 git pull / merge)。我怎样才能防止这种情况发生? (顺便说一下“修复”它,我不得不 Cherry Pick 所有丢失的提交..)

【问题讨论】:

  • 您能从您的存储库中向我们提供git log --graph --oneline --decorate --all 吗?
  • 还有很多其他的提交,我会试着清理一下!
  • 仅最后 10 次提交就足以更好地了解情况。只需将-10 添加到上一个命令即可。
  • 刚刚更新了我的帖子,希望够清楚。
  • 我认为问题是因为分叉不同步(当我接受他的 PR 然后恢复它时,他没有 git pull / merge)。我怎么能防止呢? (顺便说一下“修复”它,我不得不 Cherry Pick 所有丢失的提交..)

标签: git github git-merge revert pull-request


【解决方案1】:

如果您还原合并提交,则需要先还原还原,然后才能再次合并分支。

见:https://*.com/a/1078209/1049112

引用http://www.kernel.org/pub/software/scm/git/docs/howto/revert-a-faulty-merge.txt

【讨论】:

  • 这就是我害怕的。所以当你有一个公共回购时,我猜你真的必须小心。谢谢!