【发布时间】:2011-07-18 07:14:46
【问题描述】:
我已经对存储库进行了一系列更改,但它们被其他人还原(它们在 Windows 上编译,但在 linux 上不编译)。我认为这些更改仍在历史记录中,但我怎样才能恢复这些更改、修复它们,然后重新提交?
【问题讨论】:
我已经对存储库进行了一系列更改,但它们被其他人还原(它们在 Windows 上编译,但在 linux 上不编译)。我认为这些更改仍在历史记录中,但我怎样才能恢复这些更改、修复它们,然后重新提交?
【问题讨论】:
您是否尝试过还原?
他们使用
恢复了您的提交git revert <your commit id>
revert 本身是一个提交,并且有自己的提交 ID。所以现在你需要做
git revert <the commit id of his revert-commit>
【讨论】:
您可以尝试使用git revert 还原还原。您还可以使用git checkout 从您的提交中恢复文件。或者您可以使用git cherry-pick -n 重新应用并更改它们。您可以从提交中创建一个新分支,并使用git branch 在其中应用更改。可能性(几乎)是无穷无尽的。 :)
【讨论】:
git cherry-pick --no-commit 是一个不错的选择,尤其是因为您可以重复执行此操作以进行进一步的更改
此处的其他答案解决了如何恢复或挑选您的提交,但从这个问题听起来好像您还需要知道如何找到您的提交,所以这里有一些指导。
如果您只是运行git log,您应该会看到当前分支历史记录中的提交列表,从最近的开始。每个提交都有一个标识符,技术上称为对象名称(或“提交的 SHA1sum”),如下所示:
commit d2d434beeb03e4ee648ca7ca2a1ea1ed09077306
... 后跟作者姓名、日期和该提交引入的更改的摘要。当您为git revert 或git cherry-pick 指定对象名称时,您可以给它d2d434beeb03e4ee648ca7ca2a1ea1ed09077306 或对象名称开头的足够字符以明确(例如d2d434bee)
git log 有许多 选项可以帮助您追踪您的提交,例如--before、-S 等,但在这种情况下您可能特别需要--author=MyLastName。
gitk --all 是一个图形化的 git 工具,它可以很好地向您展示历史并且在每个平台上都可用。如果您单击要还原的提交,则可以从窗口中间的“SHA1 ID”字段复制并粘贴其对象名称。
【讨论】:
您也可以像@MarkLongair 的类似情况回答https://stackoverflow.com/a/10415744/704008。 Answer 更适合多次提交和如果您不希望 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 集成)。
【讨论】: