如何在将 HEAD 保留在当前变更集上的同时签出另一个变更集

  • 本文关键字:另一个 保留 HEAD 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

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

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 回到那里。

相关内容

最新更新