我使用IntelliJ Git集成插件。我在多存储库模式下运行,正常情况下一切正常。
当我告诉Git通过键入而不是从多仓库/分支UI中选择分支名称来签出分支名称时,它会在分支名称后附加^ 0,从而导致控制台消息,我正在Detched Head中签出州。我对“分离头”的含义比对插入符号“ ^”的语法更熟悉,因此我不确定100%是否准确。
尽管如此,有人知道为什么会这样吗?为什么它选择检出mybranch ^ 0而不是仅检出mybranch?
(从右下角的Git UI中,选择存储库,选择“签出标签或修订版”,键入分支名称,而不是从分支的UI列表中选择它)
IntelliJ中的“控制台”显示:
09:50:54.244:[reponame] git -c core.quotepath = false -c log.showSignature = false结帐功能/ branchName ^ 0 -
Git bash显示分离的头部状态,而不是位于分支上:
user@WORKSTATION MINGW64 /c/dev/intellij projects/repo-name ((b72ad203...))
答案 0 :(得分:4)
在Git中,直接签出标签或提交哈希始终会使您进入“分离的HEAD”状态。为了使“签出标签或修订”的行为保持一致,Git插件特意添加了^0
,以便您在“分离的HEAD”状态下签出所选分支上的最新提交,就像您直接输入了该提交的哈希值。也就是说,这样做是为了使“签出标签或修订”始终使您处于“分离的HEAD”状态。
如果未执行此操作,则要实现此效果将更加困难:您必须在日志中查找哪个提交是该分支上的最新提交,然后将提交哈希复制并粘贴到弹出“结帐修订”。
如果这不是您想要的,请不要使用“结帐标记或修订”。而是从分支UI中选择分支。不要忘记,在IntelliJ中,每个列表和菜单都具有预输入过滤功能,因此您可以从分支名称中键入一些字母,从而不必阅读整个列表。
^
到底是什么? Git中的^
表示法选择父提交。 commit^
或commit^1
表示第一个父级,commit^2
表示第二个父级(即合并),依此类推。 ^0
表示相同的提交。 commit
可以是命名提交的任何方式,包括哈希或分支名称。
因为您可以使用分支名称,所以branch^0
表示对branch
的最新提交,但是它命名了提交本身,而不是分支。因为它指定了特定的提交而不是分支,所以它进入“分离的HEAD”状态。
答案 1 :(得分:1)
没有任何操作可以通过键入IntelliJ来签出分支。有一个称为Checkout Tag或Revision的操作,用于将签出到分离状态。请参阅Dan的答案,以及https://youtrack.jetbrains.com/issue/IDEA-181686
要在IntelliJ中签出分支,请使用相应分支的操作列表中的Checkout操作。分支弹出窗口支持speedsearch,因此您无需鼠标即可做到:
Ctrl+Shift+[Backquote]
,签入Keymap Enter
打开操作列表Enter
执行