当我运行$ git checkout --detach
时,我理解幕后发生的事情。
在master
上,当我$ git checkout --detach
时,我的.git/HEAD
并未指向ref: refs/heads/master
,而是指向哈希(与refs/heads/master
相同)。
当我真的想要这样做的时候会是什么用例?
答案 0 :(得分:5)
根据commit that introduced the flag:
例如,在进行临时合并时可能会使用此方法 测试两个主题一起工作。
我想这个想法是故意分离允许你进行进一步的提交,你知道一旦完成就会被丢弃(并且一旦GC运行)。
请注意,此标志实际上并未添加任何新功能;您可以使用git checkout some-branch^0
获得相同的结果。
答案 1 :(得分:2)
以下是我个人如何使用 git checkout --detach
的真实示例。
我正在开发一个名为 midimap 的程序,我也有一个稳定的长期在后台运行的进程。
为此,我使用两个 worktrees,~/vc/github.com/fossegrim/midimap
,在此称为 DEV,用于开发,而 ~/vc/github.com/fossegrim/midimap-stable
,在此称为 STABLE,用于长期进程。
当我启动计算机时,我在 STABLE 中运行 midimap 程序并在 DEV 中打开 GNU Emacs。当我在 DEV 中处理我的项目时,我最终会想更新 USAGE 工作树以包含 DEV 的更改。
因为签出已经在另一个工作树中签出的分支是非法的。我必须用另一种方式检查它:git checkout --detach master
。