2

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

$ 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

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

4

2 回答 2

2
git update-ref HEAD <desired-SHA>

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

于 2012-04-27T16:58:16.627 回答
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)而不是找到 rev HEAD 是什么,然后使用git update-ref HEAD $rev返回那里。)

于 2012-04-27T19:45:04.290 回答