我正在查看我最近的两个更改集:
$ git log --oneline
123798 most recent stuff
349873 earlier changes
...
目前,我在"最新的东西"变更集上。我想做的是让 HEAD 指针停留在这个变更集上,但让文件看起来好像我在"早期更改"上。有点与git reset --soft
相反,其中HEAD指针移动但文件不会更改。
编辑
我发现的作品是要做的
$ git checkout 349873
$ git reset --soft 123798
$ git reset HEAD
所以这描述了我想要发生的事情。但我想知道是否有更简洁的方法可以做到这一点?
git update-ref HEAD <desired-SHA>
这不会触及您的工作副本。
有更短的方法可以做到这一点,但是:
if current=$(git symbolic-ref HEAD); then
git checkout $@
git symbolic-ref HEAD $current
fi
作为外壳脚本做这个技巧。 (这当然是不寻常的事情... 您将从 checkout 命令中获得通常的"分离的 HEAD"消息,随后尝试返回到您开始的任何分支会抱怨您已经在使用它,即使您不是。
(以上假设你处于某个分支的顶端,并希望留在那里。 如果你已经处于detached HEAD
状态,它会抱怨没有符号引用。 改用rev=$(git rev-parse HEAD)
来查找 rev HEAD 是什么,然后使用 git update-ref HEAD $rev
回到那里。