Mac应用程序的“ GitHub Desktop ” Mac应用程序在主视图的提交区域中具有“撤消”按钮。
单击它似乎会从存储库中删除最新提交,而无需进行确认。尽管本地更改仍然可用,但撤消过去当前不在本地中的所有内容似乎可以从存储库历史记录中完全删除它。这是演示存储库的日志。几次提交后,然后按“撤消”,看起来像这样:
- f6e4436(主)初始提交。
- a3857ad添加了示例文件。
- cf17c3b添加了关键内容。
- 35f1c76(HEAD-> dev)意外删除关键行。
此时,关键线不再位于本地或最后一次提交中。它仍然可以通过“ cf17c3b”散列使用。
单击撤消一次会产生以下结果:
- f6e4436(主)初始提交。
- a3857ad添加了示例文件。
- cf17c3b(HEAD-> dev)添加了关键内容。
两点之后:
- f6e4436(主)初始提交。
- a3857ad(HEAD-> dev)添加了示例文件。
最后,第三次按“撤消”按钮将仓库的状态恢复为:
- f6e4436(HEAD-> dev,master)初始提交。
在最后两次单击“撤消”之后,不再可以访问“ cf17c3b”提交(即,我不小心删除的关键行似乎已被完全删除)。
我没有在应用程序中看到任何要“重做”由“撤消”完成的更改的内容。这是非常令人惊讶的,因为该按钮不需要确认它可能会永久删除代码。我的问题是:
是否可以从应用程序内部“重做”以恢复由“撤消”删除的提交?
如果无法通过该应用程序,则可以通过命令行吗?
我不知道通过应用程序知道什么,但是使用git reflog
它可以找到HEAD
去往的历史,然后将当前分支与该提交合并以恢复它(以及所有先前的提交)。我的猜测是该应用程序用于git reset
撤消提交,因此您的reflog可能如下所示:
0ba8580 HEAD@{0}: reset: moving to head~
1451518 HEAD@{1}: reset: moving to head~
79b5909 HEAD@{2}: reset: moving to head~
a28c206 HEAD@{3}: checkout: moving from 4de17de8c1a89f17db894150144e58f8b0b50f6c to master
4de17de HEAD@{4}: checkout: moving from master to head~4
a28c206 HEAD@{5}: checkout: moving from 5005e7d017b15cf6d725ca01ac586e566338fa86 to master
最近的操作在列表上排名第一。你想要做的是与线合并后的reset
要撤消。因此,例如在这种情况下,您可以尝试git merge HEAD@{3}
。如果要在合并之前检查提交,请执行git show HEAD@{3}
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句