gitHEAD分离*from*vs分离*at*
我对 git并不陌生。我知道分离的 HEAD 是什么,我可以签出一个新的分支来继续前进。但是今天我看到的是一条detached from消息而不是一条detached at消息。在尝试中止包含 2 个子模块的 repo 中的合并时,我的一个子模块陷入了这种状态:
so_is_my_nacho_cheese$ git status
HEAD detached from 9733eeb0
nothing to commit, working tree clean
问题 1:
在从部分被扔我。我看惯了at。这个提交指的是什么?这是 HEAD 在被移动到无分支提交之前的最后一个位置吗?就我而言,该提交位于子模块 reflog 中,但在HEAD@{7}. 这似乎不是 HEAD 的最后一个位置。但是因为这是父模块中中止合并的结果,因此可能无法追踪 HEAD 的运动。这是什么detached from提交通常指的是什么?
问题2:
要添加到我的困惑,根据git的日志,我的头是在子模块的一个分支指向:
so_is_my_nacho_cheese$ git log --graph --oneline -n 5
* ba737d3b (HEAD, xdhmoore_pascal) Just to record pascal run
* 5b69ce96 Fix fine_tune_checkpoint_loading
* 21dc78b2 Just docker changes applied to base
* 9733eeb0 (xdhmoore_base) Updating center_net_mobilenet_v2_fpn_feature_extractor to support classification finetuning.
* 63ec7359 Adding float feature to dataset_util
为什么git status告诉我我的 HEAD 是分离的(来自 9733eeb0,虽然不是在什么提交上)而git log说它指向ba737d3b?
回答
当分离HEAD点指向首次检出的提交时,git status表示detached at <the_base_commit>. 如果那时你进行新的提交或用于git reset移动HEAD到另一个提交,例如到它的父级,git status说detached from <the_base_commit>。如果然后你重置HEAD回基本提交,再次git status说detached at <the_base_commit>。
基本提交记录在HEAD的 reflog 中,在.git/logs/HEAD. 如果您删除.git/logs/HEAD,则git status表示Not currently on any branch因为它现在找不到基本提交。