什么可能导致git中的数据丢失?

Bre*_*hio 11 git

我不想在git中蠢蠢欲动,我想像他们在FaceBook上说的那样"快速行动并打破局面".实际上,我认为这几乎是版本控制的重点.我真正需要注意什么?

我猜git rm,尤其是-r可能很危险.

什么时候分支,什么导致覆盖?

Aje*_*i32 7

一般来说,很难 git中导致数据丢失.即使在运行从历史记录中删除提交或删除分支的命令时,Git也几乎从未真正删除已经检入存储库的任何内容.

您唯一需要担心的是删除尚未签入git的文件的命令.通常,git将需要这些命令的--force(-f)或--hard标志.

以下是潜在危险命令的快速列表以及使用它们时需要注意的事项:

可以永久删除未提交给git的数据:

  • git rm -f - 可以删除尚未签入的文件
  • git reset --hard - 将删除尚未签入git的更改
  • git clean -f - 将删除git未跟踪的文件
  • git checkout /path/to/file - 可以将未签入的更改还原为git
  • git checkout <rev> -f - 可以覆盖未签入git的更改
  • rm -rf .git- 不要删除你的.git目录!这就是存储您所有本地历史的内容.

可以删除远程存储库上的数据(可逆,但您可能没有恢复远程存储库上的提交所需的访问级别):

  • git push -f - 从远程存储库中的分支中删除历史记录
  • git push <remote> :<branch>- 或git push <remote> --delete <branch>- 删除远程分支

可以永久删除原本可以恢复的已删除数据(类似于清空操作系统上的垃圾箱):

  • git prune - 永久删除无法从任何分支访问的提交
  • git gc- 永久删除无法从任何分支访问的提交

可以删除本地提交(它们很容易恢复):

  • git reset <revision>- 可以从分支中删除历史记录(它可以在本地恢复,但大约两周左右,除非你运行git prune)
  • git branch -D <branch> - 删除尚未合并的分支(可在本地恢复)
  • git branch -f <branch> <rev> - 可以从分支中删除历史记录(可在本地恢复)


gtu*_*rri 3

git rm并不是那么危险,因为您可以在之后从以前的提交中检索文件。

作为一般经验法则,请注意该-f选项:它强制 Git 做一些它不想做的事情。(例如:branch -fpush -f