2011-03-18 123 views
30

我已经对存储库进行了一系列更改,并且他们被其他人(他们在Windows上编译,但不在Linux上编译)恢复。我认为这些变化仍在历史中,但我怎样才能重新获得这些变化,修复它们,然后重新提交?我该如何修复恢复的git commit?

回答

52

您是否尝试恢复恢复?

他们恢复使用

git revert <your commit id> 

的复归本身就是一个承诺,有其自身提交ID你的提交。所以现在你需要做

git revert <the commit id of his revert-commit> 
+0

继续......我需要知道魔术词,而不仅仅是理论。 – mmr 2011-03-18 16:07:16

+0

对不起,评论的东西对我来说是新的。我将编辑我的帖子。 – 2011-03-18 16:07:37

+0

如果您在查找ID时遇到问题,请向我显示提交日志。 – 2011-03-18 16:09:49

19

你可以尝试使用git revert恢复恢复。您还可以使用git checkout从提交中恢复文件。或者,您可以使用git cherry-pick -n重新应用并更改它们。您可以使用git branch从您的提交中创建一个新分支。可能性(几乎)是无止境的。 :)

+3

+1:'git cherry-pick --no-commit'是一个不错的选择,尤其是因为您可以重复执行以进一步完成更改 – 2011-03-18 16:52:59

2

其他答案在这里解决如何恢复或樱桃挑选您的提交,但它听起来像问题,如果你还需要知道如何找到你的提交,所以这里有一些指导。

如果您只是运行git log,您应该从最近一次开始查看当前分支历史记录中的提交列表。每个提交具有技术上称为对象名称标识符(或“上提交的SHA1SUM”),看起来像这样:

commit d2d434beeb03e4ee648ca7ca2a1ea1ed09077306 

...其次是作者姓名,日期和那名更改的摘要由该提交引入。当你为git revertgit cherry-pick指定对象名称,你可以给它d2d434beeb03e4ee648ca7ca2a1ea1ed09077306或只是足够的字符从对象名称的开头是明确的(如d2d434bee

git log许多选项,可以帮助您跟踪下载您的提交,如--before-S等,但在这种情况下,您可能特别需要--author=MyLastName

一个图形化的git工具,可以很好地向您展示历史记录,并且可以在每个平台上使用,是gitk --all。如果您点击您想要恢复的提交,则可以在窗口中间的“SHA1 ID”字段中复制并粘贴其对象名称。