git 我为什么要离开呢

yhxst69z  于 2023-01-19  发布在  Git
关注(0)|答案(4)|浏览(140)

当我运行$ git checkout --detach时,我知道引擎盖下发生了什么。
而在master上,当我$ git checkout --detach时,我的.git/HEAD不是指向ref: refs/heads/master,而是指向一个散列(与refs/heads/master相同)。
当我真的想这么做的时候,用例是什么?

gwbalxhn

gwbalxhn1#

根据commit that introduced the flag
例如,在进行临时合并以测试两个主题是否能够很好地协同工作时,可以使用此方法。
我猜这个想法是故意分离允许您再进行一些提交,而这些提交在完成后(以及在GC运行后)将被丢弃。
注意,这个标志实际上并不添加任何新功能;您可以使用git checkout some-branch^0获得相同的结果。

rdrgkggo

rdrgkggo2#

tl; dr: checkout 已经在另一个工作树中 checkout 的分支是非法的。
输入git checkout --detach master
现在,为了更清楚地解释如何达到这种情况,下面是我个人如何使用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的更改。
因为 checkout 一个已经在另一个工作树中 checkout 的分支是非法的。我必须用另一种方法 checkout 它:git checkout --detach master.

tmb3ates

tmb3ates3#

当您选择 checkout 一个提交哈希,或者使用--detach checkout 一个分支时,任何提交都不会属于某个特定的分支。
因此,在测试某些东西时,拥有一个分离的头(就像这个场景所称的那样)是很有用的。
参考文献:

8iwquhpp

8iwquhpp4#

当您在多开发人员环境中工作时,您可能会遇到这样的情况:在代码评审期间,您希望尝试某些代码更改,以便更好地了解其他开发人员所做的工作,从而提供更好的反馈。
您添加的任何提交都挂起在void中,实际上并没有添加到任何分支中。
另一个开发人员随后调整代码并推送新的提交。
在这之后,您只需执行一次获取和 checkout --再次分离原始分支,而不必显式地丢弃任何内容或解决合并冲突。
你实际上也没有在本地提取分支,所以在你完成代码评审之后,你不需要删除分支(或者你添加的提交)。

简而言之

命令git checkout origin/master --detach允许你 checkout 分支指向的提交,而不需要提取和跟踪分支本身。当你 checkout 另一个分支时,你所做的任何修改和创建的提交都将被自动丢弃(包括“分支”本身),而不需要手动删除它们。

相关问题