Git 我如何签出另一个变更集,同时保持对当前变更集的关注?

Git 我如何签出另一个变更集,同时保持对当前变更集的关注?,git,Git,我正在查看最近的两个变更集: $ git log --oneline 123798 most recent stuff 349873 earlier changes ... 目前我在“最新资料”变更集中。我想做的是让头指针保持在这个变更集上,但是让文件看起来就像我在“早期变更”上一样。与git reset--soft相反,头部指针移动,但文件不变 编辑 我发现有用的是 $ git checkout 349873 $ git reset --soft 123798 $ git reset HEA

我正在查看最近的两个变更集:

$ git log --oneline
123798 most recent stuff
349873 earlier changes
...
目前我在“最新资料”变更集中。我想做的是让头指针保持在这个变更集上,但是让文件看起来就像我在“早期变更”上一样。与git reset--soft相反,头部指针移动,但文件不变

编辑

我发现有用的是

$ git checkout 349873
$ git reset --soft 123798
$ git reset HEAD
这就是我想要发生的事情。但我想知道是否有一种更简洁的方法可以做到这一点?

git update ref HEAD
git update-ref HEAD <desired-SHA>

这不会影响您的工作副本。

我不知道较短的方法,但是:

if current=$(git symbolic-ref HEAD); then
    git checkout $@
    git symbolic-ref HEAD $current
fi
将该技巧作为shell脚本执行。(这当然是一件不寻常的事情……)您将从checkout命令中得到通常的“detached HEAD”消息,随后尝试返回到您启动的任何分支时,都会抱怨您已经在它上面了,即使您没有


(以上假设您处于某个分支的顶端,并且希望留在那里。如果您已经处于
分离头
状态,它会抱怨没有符号参考。使用
rev=$(git rev parse HEAD)
来找到什么是rev HEAD,然后使用
git update ref HEAD$rev
返回那里。)

嗯,我认为这与我想要的正好相反。我只想更新我的工作副本——同时让我的头指向它所在的位置。@RobertMartin,诀窍是
git重置--hard 349873&&git update ref HEAD 123798
。重置将为您提供先前提交的文件,update ref将更新您的头部以指向最近的提交。同意@KL,尽管我更喜欢签出而不是重置hard@CharlesB签出较早的提交将使您处于分离的头部状态。即使是
updateref
也无法修复它。因此,如果您想保持在同一分支上,则必须重置。