如何修复还原的git提交?

时间:2011-03-18 16:04:54

标签: git commit

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

4 个答案:

答案 0 :(得分:65)

您是否尝试恢复还原?

他们使用

恢复了您的提交
git revert <your commit id>

revert本身是一个提交,并有自己的提交ID。所以现在你需要做

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

答案 1 :(得分:21)

您可以尝试使用git revert恢复还原。您还可以使用git checkout从提交中恢复文件。或者您可以使用git cherry-pick -n重新应用它们并进行更改。您可以使用git branch从提交中创建新分支,然后应用更改。可能性(几乎)无穷无尽。 :)

答案 2 :(得分:2)

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

如果您只是运行git log,您应该会看到当前分支历史记录中的提交列表,从最新的分支开始。每个提交都有一个标识符,在技术上称为对象名称(或“提交的SHA1sum”),如下所示:

commit d2d434beeb03e4ee648ca7ca2a1ea1ed09077306

...后跟作者姓名,日期和该提交引入的更改摘要。当您为git revertgit cherry-pick指定对象名称时,您可以将其d2d434beeb03e4ee648ca7ca2a1ea1ed09077306或从对象名称开头的足够字符设为明确(例如d2d434bee

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

图形git工具可以很好地呈现历史记录并且可以在每个平台上使用gitk --all。如果单击要还原的提交,则可以从窗口中间的“SHA1 ID”字段中复制并粘贴其对象名称。

答案 3 :(得分:1)

您也可以像@MarkLongair一样对类似情况https://stackoverflow.com/a/10415744/704008做出回答。如果您不希望git日志或源控制历史记录中的内容混乱,而多次提交,然后再次还原,则答案更适合。

git revert abcd123
git revert --no-commit wxyz789
git commit --amend -m"you edit commit message"

对于两个或两个以上的还原提交,您也可以在一行中简洁明了:

git revert abcd123 wxyz789 --no-commit 
git commit --amend -m"you edit commit message"

...,然后编写适当的提交消息,说明还原两个提交的综合效果。

所有这些都将显示为具有给定消息的单次提交,而不是git日志或源代码管理日志(如bitbucket / TFS / JIRA git集成)中的多个还原提交。