IntelliJ Git集成插件:尝试结帐时,分支名称后附加了^ 0

时间:2018-12-13 18:09:12

标签: git intellij-idea intellij-plugin

我使用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...))

2 个答案:

答案 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,因此您无需鼠标即可做到:

  1. 使用快捷方式打开分支弹出窗口-在Win上Ctrl+Shift+[Backquote],签入Keymap
  2. 输入分支名称
  3. Enter打开操作列表
  4. 选择操作,然后Enter执行