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

Ric*_*lli 11 git

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

有什么命令我应该注意并避免错误地使用,因为没有回头路?

Mik*_*itz 11

这里有两种"破坏性" - 破坏你的git历史的命令和丢弃工作副本中的变化的命令.

丢弃工作树更改的命令:

  1. git reset
  2. git checkout

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

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

  1. git gc (默认情况下,此修剪至少2周的无法访问的对象)

  • 在我看来,丢弃工作树的最具破坏性的 git 命令会发生变化。使用 'git stash 进行“备份”应该总是安全的;git stash pop'。您可以稍后(达到您的 gc prune 限制)通过以下命令恢复“丢失”的版本,例如: gitk --all -n 5000 --all $(git fsck | awk '/dangling commit/ {print $3}'; git log -g --pretty='format:%H') [这将打开 gitk 前端,最多 5000 次提交,包括所有“丢失”的提交]。 (2认同)

mik*_*iku 7

根据http://blog.reverberate.org/2009/07/30/gits-needs-a-new-interface/

 $ git checkout foo.c
Run Code Online (Sandbox Code Playgroud)

...将覆盖你可能不得不foo.c的任何本地修改.