如何在工作树中“git reset”?
How do I `git reset` in a worktree?
我注意到,如果我尝试在辅助工作树上 git reset
,它会根据 主要 工作树进行重置。
假设我已经 master (d) 在我的正常回购中签出,并且在我单独的工作树中有 feature (f)。如果我这样做 git reset --hard head~1
我最终会在 c 而不是我期望的 e:
master _______a______c__d
feature \__b________e__f
我尝试寻找如何在工作树中正确重置,但一直找不到任何东西。
使用分支名称似乎符合我的预期:git reset --hard feature~1
这里的技巧是您使用的是折叠系统(典型的 MacOS 或 Windows 设置,但不适用于 Linux 设置)并且您使用了 head
(小写)而不是 HEAD
(全部大写)。
当您在存储库的主工作树中执行此操作时,它无论如何都可以工作。但是,当您在添加的工作树中执行此操作时,它会失败:head
解析为 main 工作树中分支的尖端提交,而不是尖端提交当前工作树中的分支。例如,如果您在 feature
上工作的工作树中,而主工作树已 master
签出,则 HEAD~1
表示 feature~1
但 head~1
表示 master~1
.
如果您不喜欢输入全部大写的 HEAD
,您可以在本应使用 HEAD
的地方使用 @
符号。例如,@~1
与 HEAD~1
意思相同; git reset --hard @
与 git reset --hard
意思相同;等等。
我注意到,如果我尝试在辅助工作树上 git reset
,它会根据 主要 工作树进行重置。
假设我已经 master (d) 在我的正常回购中签出,并且在我单独的工作树中有 feature (f)。如果我这样做 git reset --hard head~1
我最终会在 c 而不是我期望的 e:
master _______a______c__d
feature \__b________e__f
我尝试寻找如何在工作树中正确重置,但一直找不到任何东西。
使用分支名称似乎符合我的预期:git reset --hard feature~1
这里的技巧是您使用的是折叠系统(典型的 MacOS 或 Windows 设置,但不适用于 Linux 设置)并且您使用了 head
(小写)而不是 HEAD
(全部大写)。
当您在存储库的主工作树中执行此操作时,它无论如何都可以工作。但是,当您在添加的工作树中执行此操作时,它会失败:head
解析为 main 工作树中分支的尖端提交,而不是尖端提交当前工作树中的分支。例如,如果您在 feature
上工作的工作树中,而主工作树已 master
签出,则 HEAD~1
表示 feature~1
但 head~1
表示 master~1
.
如果您不喜欢输入全部大写的 HEAD
,您可以在本应使用 HEAD
的地方使用 @
符号。例如,@~1
与 HEAD~1
意思相同; git reset --hard @
与 git reset --hard
意思相同;等等。