移动 git HEAD 不改变任何其他东西
Move git HEAD without changing anything else
我想移动 HEAD
,并且只移动那个。
这意味着我想保持原样:
- 索引(a.k.a。缓存/暂存区)
- 工作树
- 提交当前分支参考点
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 \"\" #" # 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
我想移动 HEAD
,并且只移动那个。
这意味着我想保持原样:
- 索引(a.k.a。缓存/暂存区)
- 工作树
- 提交当前分支参考点
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 \"\" #" # 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