我偶尔会不小心写成git checkout ...
,这会使我进入分离头状态。我想知道为什么会这样。以下是"点号故事":
> git checkout .
# checks out current directory
> git checkout ..
# Checks out parent directory, if in repository.
> git checkout ...
# Puts into detached head state?
> git checkout ....
error: pathspec '....' did not match any file(s) known to git.
get_oid_mb
的函数中实现了这个功能,其中mb
代表合并基础。它字面上检查三个点...
表示法,当存在时,在两侧解析两个修订版本(或使用HEAD
如注释所述),然后实际上运行git merge-base --all <rev1> <rev2>
来获取合并基础。如果恰好有一个这样的合并基础,那就是提交;否则...
无法解决。 - torekgit diff
命令曾经使用相同的技巧:git diff A...B
意味着git diff $(git merge-base A B) B
,我认为可能代码是共享的。现在git checkout
是唯一使用get_oid_mb
的用户。所有其他情况都按照文档中描述的方式处理,即不会实际运行等效的git merge-base --all
。 - torekgit checkout
和git diff
之外的所有内容。git diff
中的代码使用了你运行git rev-parse
所看到的内部版本:例如运行一个字面上的git rev-parse ...
。但是,git diff
会以一种目前略微有问题但如果只有一个合并基础则表现良好的方式转换正负参考集。 - torek