【问题标题】:Git Detached head & checkout [duplicate]Git分离头和结帐[重复]
【发布时间】:2017-09-19 19:10:54
【问题描述】:

当我运行命令git log --oneline --decorate --graph --all时,我有以下图表:

* 7ee76a4 (HEAD) added 2.txt
| * 2ff2a0c (master) changed line of 1.txt
|/
* 9a0825b Initial commit

由于 head 不在任何分支中,当我结帐时,可以说带有 git checkout master 的“master”分支消失了,我得到了一个图表结果:

* 2ff2a0c (HEAD -> master) changed line of 1.txt
* 9a0825b Initial commit

我的问题如下:
7ee76a4 提交真的不应该被删除吗?虽然我在图中没有看到它(而且它似乎已被删除),但当我执行git checkout 7ee76a4 时,Git 会将我带回之前的状态(这意味着提交没有被删除)。

我是不是忘记了什么?

【问题讨论】:

  • 它只是被隐藏了。使用git log --oneline --decorate --graph --all 7ee76a4,您仍然可以看到它。如果您忘记了7ee76a4 的值,您可以在git reflog 中找到它。

标签: git github gitlab


【解决方案1】:

在 git 中删除一个提交并不容易(参见here)。如果无法再从任何分支访问提交,则它变为unreachable。它仍然会在那里,您仍然可以通过它的 id 来查看它。 Git 的reflog 仍会保留一段时间,具体取决于您的reflog 设置。只有当reflog 不再引用该提交时,它才会成为dangling 提交。但是,只有在下一个 garbage collection 确实删除它时才会删除它。

但是,此过程需要几天到几周的时间,具体取决于您的设置和工作速度(因为您执行 git 操作的频率越高,旧提交就越快从 reflog 中消失)。

该提交未显示在图表中,因为无法从您当前的 HEAD 访问它(即根本无法从任何分支访问)。这意味着它已被删除。

【讨论】:

  • 所以,所有开发人员应该选择的共同行动是,他们不应该担心提交存在(当然是隐藏的)并且应该忘记它?由于垃圾收集器将来可能会删除它,因此它应该是首选操作。对吗?
  • 对,通常就是这样。由于提交不会出现在任何地方,除非您明确查找它,因此您不必关心它,它最终会被垃圾收集。
  • 如果提交包含密码等敏感信息,您应该会看到它已从存储库中完全清除。关于这个问题有几个问题(如this)。
猜你喜欢
  • 2016-12-22
  • 2017-04-27
  • 1970-01-01
  • 2012-05-01
  • 2013-10-31
相关资源
最近更新 更多