git中的破坏性命令是什么?

时间:2010-04-28 09:56:00

标签: git

我读到Git主要添加有关存储库历史的信息,试图记住所做的每一个更改,但也有一些命令会发生不可逆转的更改。

我应该注意哪些命令并避免错误使用,因为没有回头?

4 个答案:

答案 0 :(得分:11)

这里有两种“破坏性” - 破坏你的git历史的命令和放弃工作副本中的变化的命令。

放弃工作树更改的命令

  1. git reset
  2. git checkout
  3. 正如其他人所提到的,reflog和git对象不会被立即丢弃的事实的组合(除非你打开自动清理)意味着你通常可以撤消像git reset/rebase/merge这样的操作。

    但是,这些命令实际上丢弃git对象,从而无法撤消:

    1. 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的保护,但需要过几天。

例如,如果您checkoutrebaseresetmerge都引入了更改,则可以通过运行{{}返回到先前的提交1}}命令并使用reflog将HEAD重置为旧提交。