推送后恢复丢失的提交

时间:2013-05-02 16:16:30

标签: git

我可以在恢复策略中使用一些帮助。不知何故,我们最终处于一个提交下降约3天提交的位置。 然后被推。提交者不确定他是否强迫推进或什么,但现在我们处于这个位置。自“坏”提交以来,已经推出了大约10个提交。

所有的旧提交都在那里,我可以将所有内容重新组合在一起,但我希望Git可以帮助我。我想我可以挑选A点和B点之间的提交范围,但有什么更好的吗?大多数(但不是全部)更改都是一个目录的本地更改,我宁愿不手动检查每个目录。

这里有什么正确的方法,记住一切都被推向了上游?

3 个答案:

答案 0 :(得分:3)

git reset --hard <one commit before the bad commit>
git cherry-pick <the range of commits you've lost>
git pull

通过这种方式,您可以模拟最后一次提交(使用reset)。然后在本地创建新的提交(cherry-pick)。现在你引入了变化(也许是合并冲突)。

答案 1 :(得分:1)

您可能有兴趣检查上游或本地仓库的git reflog。即使提交看起来就像它们丢失一样,它们实际上仍然可能在您的远程/本地存储库中闲置,只是没有分支指针。他们不会永远保持这样,我认为git确实garbage collection every 2 weeks by default

  

可选配置变量gc.pruneExpire控制未被引用的松散对象在被修剪之前必须有多长。默认为“2周前”。

您可以在Pro Git §9.7: Maintenance and Data Recovery了解有关使用reflog恢复丢失工作的更多信息。

如果你在reflog中找到提交(或者你可能也希望在git fsck --full中查找它们),你可以附加一个分支指针来“恢复”它们。然后,您可能希望在{top> rebasecherry-pick更新提交,以便(重新)构建您想要的任何提交历史记录树。

答案 2 :(得分:0)

git revert将在新提交中撤消提交的更改。