我想移动 HEAD
,并且只做这个操作。
这意味着我希望保持以下内容不变:
- 索引(也称为缓存 / 暂存区)
- 工作树
- 当前分支引用指向的提交
git reset --soft
可以完成前两项,但不能改变最后一项。
有没有一种方法可以在不创建新分支的情况下完成这个操作?
echo $(git rev-parse $commit) > $(git rev-parse --git-dir)/HEAD
但这是不被推荐的。
git
的基础命令 update-ref
:
git 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