我读到Git主要添加有关存储库历史的信息,试图记住所做的每一个更改,但也有一些命令会发生不可逆转的更改。
我应该注意哪些命令并避免错误使用,因为没有回头?
答案 0 :(得分:11)
这里有两种“破坏性” - 破坏你的git历史的命令和放弃工作副本中的变化的命令。
放弃工作树更改的命令:
git reset
git checkout
正如其他人所提到的,reflog和git对象不会被立即丢弃的事实的组合(除非你打开自动清理)意味着你通常可以撤消像git reset/rebase/merge
这样的操作。
但是,这些命令实际上丢弃git对象,从而无法撤消:
git gc
(默认情况下,修剪至少2周的无法访问的对象)答案 1 :(得分:7)
根据http://blog.reverberate.org/2009/07/30/gits-needs-a-new-interface/
$ git checkout foo.c
...将覆盖您对foo.c的任何本地修改,而不会询问。
答案 2 :(得分:3)
git reset --hard无法撤消
答案 3 :(得分:3)
您可以使用git reset
命令丢失未提交的更改。如果您的更改已提交,则在gc
清除之前,您会受到reflog的保护,但需要过几天。
例如,如果您checkout
,rebase
,reset
或merge
都引入了更改,则可以通过运行{{}返回到先前的提交1}}命令并使用reflog
将HEAD重置为旧提交。