移动git HEAD而不改变其他任何内容

3

我想移动 HEAD,并且只做这个操作。

这意味着我希望保持以下内容不变:

  • 索引(也称为缓存 / 暂存区)
  • 工作树
  • 当前分支引用指向的提交

git reset --soft 可以完成前两项,但不能改变最后一项。

有没有一种方法可以在不创建新分支的情况下完成这个操作?

2个回答

2
您可以通过以下方式实现:
echo $(git rev-parse $commit) > $(git rev-parse --git-dir)/HEAD

但这是不被推荐的。


你尝试过第一个建议吗?对我来说它移动了分支引用。为什么第二种形式不被推荐? - Tom Hale
@TomHale 因为 Git 没有进行检查,所以这有点严格。如果您要尝试,请务必备份。 - blue112
哪些检查被跳过了,这可能会引起什么问题? - Tom Hale
这只是创建了一个“分离的HEAD”场景,对吗? - Tom Hale

1
使用 git 的基础命令 update-refgit update-ref --no-deref HEAD $hash$hash 可以是 SHA1、哈希短形式(例如 1c93)、标签或引用)

在更改日志reflog中留言是有礼貌的。为此,请创建一个别名:

head = "!p=\"$(git log -n1 --oneline --decorate)\" && git update-ref --no-deref -m \"Move HEAD from $p\" HEAD \"$1\" #" # Move HEAD to specified commit-ish

然后当你执行:

git head 1c93

reflog 将会包含以下内容:

1c93601 HEAD@{0}: Move HEAD from fd88175 (HEAD -> master, tag: oldhead, origin/master) Add diff-highlight and icdiff


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接