如何在工作树中`git reset`?

Ben*_*all 2 git git-reset git-worktree

我注意到,如果我尝试git reset使用辅助工作树,它会根据主要工作树进行重置。

假设我在我的普通仓库中检出了master (d),并且在我的单独工作树中有功能 (f)。如果我这样做,git reset --hard head~1我最终会得到c而不是我所期望的e

master   _______a______c__d
feature          \__b________e__f
Run Code Online (Sandbox Code Playgroud)

我试过寻找如何在工作树中正确重置,但一直找不到任何东西。

tor*_*rek 5

这里的诀窍是您使用的是大小写折叠系统(典型的 MacOS 或 Windows 设置,但不适用于 Linux 设置)并且您使用head(小写)而不是HEAD(全部大写)。

当您在存储库的主工作树中执行此操作时,它无论如何都可以工作。但是,当您在添加的工作树中执行此操作时,它会失败:head解析到工作树中分支的提示提交,而不是当前工作树中分支的提示。例如,如果您在工作树中工作feature而主工作树已master检出,则HEAD~1意味着feature~1head~1意味着master~1

如果您不喜欢HEAD全部输入大写,您可以@在您会使用的地方使用符号HEAD。例如,@~1HEAD~1; 的意思相同。git reset --hard @意思是一样的git reset --hard;等等。

  • 好奇的。它对我来说效果很好: `git rev-parse @~1` => `54041832d7d2a20c26bdf8eeb8aeb475024ef8d5`。...啊哈,这是一个 Powershell 问题:powershell 本身正在解释这些字符中的一个或多个。 (2认同)