如果我必须撤消我在工作分支中所做的任何更改,
git checkout .
git reset --hard HEAD
这两个命令都会将我带到最后一次提交。 这两个命令有什么区别?当我们应该使用哪个命令?
任何帮助将不胜感激。 提前谢谢。
答案 0 :(得分:2)
简短版本:git checkout
仅触及您的工作副本,但git reset --hard
可以更改分支指向的内容。来自man git-reset
的示例:
Undo a commit, making it a topic branch
$ git branch topic/wip (1)
$ git reset --hard HEAD~3 (2)
$ git checkout topic/wip (3)
1. You have made some commits, but realize they were premature to
be in the "master" branch. You want to continue polishing them in a
topic branch, so create "topic/wip" branch off of the current HEAD.
2. Rewind the master branch to get rid of those three commits.
3. Switch to "topic/wip" branch and keep working.
在您的示例中,它们可以有效地互换,但如果您使用了除HEAD
之外的其他内容(如手册页中的示例所示),则可以更改历史记录。
答案 1 :(得分:2)
git checkout
只会更新工作树,即使用git add ...
尚未暂存的更改。
git reset --hard HEAD
将更新工作树和索引(暂存文件)。
更灵活和透明的选项是使用git checkout -p
,它会提示每个部分单独撤消,并且不会撤消已经上演的更改。这是撤消您不想要的代码的绝佳选择,同时保留一些工作树更改。它还会强迫您查看您正在删除的内容,从而减少出现无法恢复的错误。
如果您有大量工作树和分阶段更改,并且确定要撤消,例如删除意外文件夹或错误git mv
后,使用重置会更合适。