IntelliJ Git 集成插件:尝试结帐时将 ^0 附加到分支名称
IntelliJ Git Integration plugin: ^0 appended to branch name when checkout is attempted
我使用 IntelliJ Git 集成插件。我在多存储库模式下运行,通常一切正常。
当我告诉 Git 通过键入而不是从 multi-repo/branch UI 中选择它来检查分支名称时,它会将 ^0 附加到分支名称,从而导致我正在以 Detached Head 状态签出的控制台消息。我对 'detached head' 的含义比对插入符号“^”语法更熟悉,所以我不能 100% 确定消息的准确性。
尽管如此,有人知道为什么会这样吗?为什么它选择签出 mybranch^0 而不是 mybranch?
(从右下角的 Git UI,select 回购,选择 'Checkout tag or revision',键入分支名称而不是 select 从 UI 分支列表)
"Console" 在 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...))
在 Git 中,直接检查标签或提交哈希总是会让您进入“分离的 HEAD”状态。为了使“checkout tag or revision”的行为一致,Git 插件故意添加 ^0
以便您在“分离的 HEAD”状态下检查所选分支上的最新提交,就像您直接键入该提交的哈希一样。也就是说,它这样做 以便 “签出标签或修订版”始终使您处于“分离的 HEAD”状态。
如果不这样做,实现这种效果会困难得多:您必须在日志中查找哪个提交是该分支上的最新提交,然后复制粘贴提交哈希进入“结帐修订”弹出窗口。
如果这不是您想要的,请不要使用“签出标签或修订版”。相反,只需从分支 UI 中选择分支。不要忘记,在 IntelliJ 中,每个列表和菜单都有提前输入过滤功能,因此您可以键入分支名称中的一些字母,以避免必须阅读整个列表。
这 ^
到底是什么东西?
Git 中的 ^
符号选择父提交。 commit^
或 commit^1
表示第一个父级,commit^2
表示第二个父级(即合并),依此类推。 ^0
表示相同的提交。 commit
可以是任何命名提交的方式,包括哈希或分支名称。
因为您可以使用分支名称,所以 branch^0
表示 branch
上的最新提交,但它命名的是提交本身,而不是分支。因为它指定了一个特定的提交,而不是一个分支,所以它进入“分离的 HEAD”状态。
没有通过在 IntelliJ 中键入来签出分支的操作。有一个名为 Checkout Tag 或 Revision 的操作,它旨在检查到分离状态。看到丹的回答,https://youtrack.jetbrains.com/issue/IDEA-181686
要在 IntelliJ 中签出分支,请使用相应分支操作列表中的签出操作。 Branches popup支持speedsearch,所以你不用鼠标也能做到:
- 使用快捷方式打开分支弹出窗口 -
Ctrl+Shift+[Backquote]
在 Win 上,检查键盘映射
- 输入分支名称
Enter
打开操作列表
- Select 操作和
Enter
执行
我使用 IntelliJ Git 集成插件。我在多存储库模式下运行,通常一切正常。
当我告诉 Git 通过键入而不是从 multi-repo/branch UI 中选择它来检查分支名称时,它会将 ^0 附加到分支名称,从而导致我正在以 Detached Head 状态签出的控制台消息。我对 'detached head' 的含义比对插入符号“^”语法更熟悉,所以我不能 100% 确定消息的准确性。
尽管如此,有人知道为什么会这样吗?为什么它选择签出 mybranch^0 而不是 mybranch?
(从右下角的 Git UI,select 回购,选择 'Checkout tag or revision',键入分支名称而不是 select 从 UI 分支列表)
"Console" 在 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...))
在 Git 中,直接检查标签或提交哈希总是会让您进入“分离的 HEAD”状态。为了使“checkout tag or revision”的行为一致,Git 插件故意添加 ^0
以便您在“分离的 HEAD”状态下检查所选分支上的最新提交,就像您直接键入该提交的哈希一样。也就是说,它这样做 以便 “签出标签或修订版”始终使您处于“分离的 HEAD”状态。
如果不这样做,实现这种效果会困难得多:您必须在日志中查找哪个提交是该分支上的最新提交,然后复制粘贴提交哈希进入“结帐修订”弹出窗口。
如果这不是您想要的,请不要使用“签出标签或修订版”。相反,只需从分支 UI 中选择分支。不要忘记,在 IntelliJ 中,每个列表和菜单都有提前输入过滤功能,因此您可以键入分支名称中的一些字母,以避免必须阅读整个列表。
这 ^
到底是什么东西?
Git 中的 ^
符号选择父提交。 commit^
或 commit^1
表示第一个父级,commit^2
表示第二个父级(即合并),依此类推。 ^0
表示相同的提交。 commit
可以是任何命名提交的方式,包括哈希或分支名称。
因为您可以使用分支名称,所以 branch^0
表示 branch
上的最新提交,但它命名的是提交本身,而不是分支。因为它指定了一个特定的提交,而不是一个分支,所以它进入“分离的 HEAD”状态。
没有通过在 IntelliJ 中键入来签出分支的操作。有一个名为 Checkout Tag 或 Revision 的操作,它旨在检查到分离状态。看到丹的回答,https://youtrack.jetbrains.com/issue/IDEA-181686
要在 IntelliJ 中签出分支,请使用相应分支操作列表中的签出操作。 Branches popup支持speedsearch,所以你不用鼠标也能做到:
- 使用快捷方式打开分支弹出窗口 -
Ctrl+Shift+[Backquote]
在 Win 上,检查键盘映射 - 输入分支名称
Enter
打开操作列表- Select 操作和
Enter
执行