呃哦...我错误地提交了一个相当复杂的更改(包括子目录和文件重命名),但实际上并不知道我在做什么(或者 Git 会做什么)。
我现在想撤消所有内容:
- commit 完全颠倒(好像 从来没有做过,也许 也将其从历史记录中删除)
- 恢复当前工作目录
(其中
.git
是)到某个 分支(现在最后一个会做)。
我找到了对 git reset --soft 的引用和 git reset --hard但我已经向自己证明,在没有完全理解命令的情况下过早地使用命令会造成真正的伤害。 :)
我找到了 git reset man page但我仍然对以下问题感到困惑:
- 什么是
HEAD
? - 有什么区别
HEAD
和* master
? - 在我的情况下(见上文)我
需要使用
--soft
,--hard
或者 其他(另外 3 个选项)? - 我需要运行另一个命令吗
(在执行
git reset
之后)到 “完成”逆转?
更新:阅读以下答案后:
- 我是否正确理解我所做的一切
在我的情况下需要做的是问题
一个命令
git reset --hard 头^
? - 我如何验证逆转是 正确执行?
最佳答案
HEAD
是 checkout 分支的最新提交。master
是一个分支(按照惯例是主分支),而HEAD
是已 checkout 分支在历史记录中的位置。HEAD
与您所在的分支相关。git reset --soft
会将您的更改保留在工作树中,您可以随心所欲地执行任何操作。git reset --hard
会将工作树恢复到您重置到的提交时的状态。- 不需要其他命令。
首先,要保留提交以备日后检查,创建一个分支:
git checkout -b my_bad_commit
(或者按照 larsman 的评论中提到的那样执行 git branch my_bad_commit
。)
然后返回到 master
或你所在的任何分支并重置:
git checkout branch_with_bad_commit
git reset --hard HEAD^
HEAD^ 翻译为“HEAD 的父级”,您甚至可以堆叠 HEAD^^ = 2 次提交。有关此主题的更多信息,请查看关于 undo in git 的 git 社区书籍章节
关于Git:如何撤消提交*和*恢复到最后一个分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6624738/