如何修复还原的 git 提交?
Posted
技术标签:
【中文标题】如何修复还原的 git 提交?【英文标题】:How can I fix a reverted git commit? 【发布时间】:2011-07-18 07:14:46 【问题描述】:我已经对存储库进行了一系列更改,但它们被其他人还原(它们在 Windows 上编译,但在 linux 上不编译)。我认为这些更改仍在历史记录中,但我怎样才能恢复这些更改、修复它们,然后重新提交?
【问题讨论】:
How do I "un-revert" a reverted Git commit?的可能重复 【参考方案1】:您是否尝试过还原?
他们使用
恢复了您的提交git revert <your commit id>
revert 本身是一个提交,并且有自己的提交 ID。所以现在你需要做
git revert <the commit id of his revert-commit>
【讨论】:
继续……我需要知道神奇的词,而不仅仅是理论。 如果找不到 ID,请显示提交日志。 找到了那些使用 git log 的。谢谢! 还原还原还原还原还原还原?大声朗读我的答案听起来真的很愚蠢。 :-)【参考方案2】:您可以尝试使用git revert
还原还原。您还可以使用git checkout
从您的提交中恢复文件。或者您可以使用git cherry-pick -n
重新应用并更改它们。您可以从提交中创建一个新分支,并使用git branch
在其中应用更改。可能性(几乎)是无穷无尽的。 :)
【讨论】:
+1:git cherry-pick --no-commit
是一个不错的选择,尤其是因为您可以重复执行此操作以进行进一步的更改【参考方案3】:
此处的其他答案解决了如何恢复或挑选您的提交,但从这个问题听起来好像您还需要知道如何找到您的提交,所以这里有一些指导。
如果您只运行git log
,您应该会看到当前分支历史记录中的提交列表,从最近的开始。每个提交都有一个标识符,技术上称为对象名称(或“提交的 SHA1sum”),如下所示:
commit d2d434beeb03e4ee648ca7ca2a1ea1ed09077306
... 后跟作者姓名、日期和该提交引入的更改的摘要。当您为git revert
或git cherry-pick
指定对象名称时,您可以给它d2d434beeb03e4ee648ca7ca2a1ea1ed09077306
或对象名称开头的足够字符以明确(例如d2d434bee
)
git log
有许多 选项可以帮助您跟踪您的提交,例如--before
、-S
等,但在这种情况下您可能特别需要--author=MyLastName
。
gitk --all
是一个图形化的 git 工具,它可以很好地向您展示历史并在每个平台上都可用。如果您单击要还原的提交,则可以从窗口中间的“SHA1 ID”字段复制并粘贴其对象名称。
【讨论】:
git cherry-pick 与日志中的大提交 id 就像一个魅力.. 再次节省了 3 天的代码编写.. 谢谢【参考方案4】:您也可以像@MarkLongair 的类似情况回答https://***.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 集成)。
【讨论】:
以上是关于如何修复还原的 git 提交?的主要内容,如果未能解决你的问题,请参考以下文章