IntelliJ Git集成插件:尝试检出时分支名称附加^0

3
我使用 IntelliJ 的 Git 集成插件。我通常以多仓库模式操作,一切正常。
当我通过输入分支名称而不是从多仓库/分支 UI 选择它来告诉 Git 检出一个分支名称时,它会在分支名称后附加 ^0,导致控制台消息显示我正在处于分离头状态。我对“分离头”这个术语比字符“^”更熟悉,所以我不确定消息的准确性是否达到100%。
尽管如此,有人知道这是为什么吗?为什么它选择检出 mybranch^0 而不是只是 mybranch?
(从 IntelliJ 的 Git UI 在右下角选择 repo,选择“Checkout tag or revision”,键入分支名称而不是从 UI 列表中选择该分支)
在 IntelliJ 中,“控制台”显示:
09:50:54.244: [reponame] git -c core.quotepath=false -c log.showSignature=false checkout feature/branchName^0 --
Git bash 显示了分离头状态,而不是在分支上:
user@WORKSTATION MINGW64 /c/dev/intellij projects/repo-name ((b72ad203...))
2个回答

4
在Git中,直接检出标签或提交哈希总是会将您置于“分离的HEAD”状态。为了使“检出标签或修订版本”的行为一致,Git插件故意添加了^0,以便您可以在所选分支上检出最新的提交,在“分离的HEAD”状态下,就像您直接输入该提交的哈希值一样。也就是说,它之所以这样做是为了让“检出标签或修订版本”始终将您置于“分离的HEAD”状态。
如果不这样做,要实现这种效果将会更加困难:您必须查看日志以找到该分支上最新的提交,然后将提交哈希复制粘贴到“检出修订版本”弹出窗口中。
如果您不想这样做,请不要使用“检出标签或修订版本”。而是从分支UI中选择分支。不要忘记,在IntelliJ中,每个列表和菜单都具有类型前缀过滤功能,因此您可以键入分支名称的一些字母,以避免阅读整个列表。
那么这个^是什么呢?
Git中的^符号选择父提交。 commit^commit^1表示第一个父提交,commit^2表示第二个父提交(即合并的父提交),以此类推。 ^0表示同一提交。 commit可以是任何命名提交的方式,包括哈希或分支名称。
因为您可以使用分支名称,所以branch^0表示branch上最新的提交,但它命名的是提交本身,而不是分支。因为它指定了特定的提交,而不是分支,所以它进入了“分离的HEAD”状态。

2
在IntelliJ中,没有通过输入来检出分支的操作。有一个名为“Checkout Tag or Revision”的操作,它旨在将其检出到脱离状态。请参见Dan的回答和https://youtrack.jetbrains.com/issue/IDEA-181686 要在IntelliJ中检出分支,请使用相应分支操作列表中的Checkout操作。分支弹出窗口支持速度搜索,因此您可以在没有鼠标的情况下完成操作:
1. 使用快捷键打开分支弹出窗口-在Win上为Ctrl+Shift+[Backquote],在Keymap中进行检查 2. 输入分支名称 3. Enter打开操作列表 4. 选择操作并Enter执行

好的 - 我实际上没有意识到你不能使用“检出标签或修订版本”选项来检出分支。我使用多个仓库,有一种情况是某个分支并不存在于所有仓库中。我曾认为使用此选项会在所有存在该分支的仓库中检出该分支。通过你的解释,我明白了这为什么会将某些仓库置于“分离头指针”模式。 - user1445967

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接