如何在保持当前变更集的HEAD的同时签出另一个变更集?

时间:2012-04-27 16:56:34

标签: git

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

$ 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

所以这描述了我想要发生的事情。但我想知道是否有更简洁的方法来做到这一点?

2 个答案:

答案 0 :(得分:2)

git update-ref HEAD <desired-SHA>

这不会触及您的工作副本。

答案 1 :(得分:1)

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

if current=$(git symbolic-ref HEAD); then
    git checkout $@
    git symbolic-ref HEAD $current
fi

将这个技巧作为shell脚本。 (这当然是一件不寻常的事情...)你会从checkout命令得到通常的“分离的HEAD”消息,然后尝试回到你开始的任何分支都会抱怨你已经在它,即使你不是。

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