将分支向后移动一步以留下无分支标记的提交

Move branch one step back to leave a branchless tagged commit

这是我目前的情况,在分支draft上工作:

* 51c716b (HEAD -> draft, tag: Printed, remote/draft) Dirty squeezing of the draft to be printed on as few pages as possible
* 9219af9 Draft ready for reading
* e3366b2 Making progress on the draft
* 163ab8f (master, remote/master) Create a draft

既然我已经收到了关于这个 Printed 版本草案的反馈,我希望 继续这个项目。显然,最新的提交 51c716b (标记为 Printed) is not the one I want to resume from: 我想从中恢复 9219af9。但我不想松动 51c716b.

下次commit后变成这样应该怎么办?

* b57cc00 (HEAD -> draft, remote/draft) Integrate feedback from readers.
| * 51c716b (tag: Printed) Dirty squeezing of the draft to be printed on as few pages as possible
|/
* 9219af9 Draft ready for reading
* e3366b2 Making progress on the draft
* 163ab8f (master, remote/master) Create a draft

(我也希望标签 Printedremote 上可用。)

注意:我知道这会给在 draft 指向 51c716b 时拉动它的人带来麻烦。但我相信没有人做过这样的事情;)

您可能正在寻找 Reset。 Git 分支是指向提交的引用,因此您基本上希望将本地引用 draft 移动到指向 9219af9。您可以这样做:

git reset --hard 9219af9

或者,如果您要使用 ancestry references

git reset --hard HEAD~1

在那之后,您可能会创建一个新提交(在您的示例中为 b57cc00),并且您必须更新 remote 引用 draftorigin 中的那个)指向新的提交。你可以这样做:

git push origin draft --force-with-lease

This 会告诉遥控器您知道您是 "loosing" 51c716b。但是,Git 仍会保留有引用指向它的提交,并且由于您在 51c716b 上有一个标记(也是一个引用),您将始终能够返回到它。如果您希望其他人(或您未来的自己)能够访问它,请确保推送您的标签:

git push origin Printed