【发布时间】:2023-04-09 05:05:02
【问题描述】:
我的ref HEAD 指向分支foo,它指向提交123abc;我有一些分阶段的工作。
如何git commit 工作,将HEAD 移动到新创建的提交,但不推进分支?
(因此:离开foo 指向123abc)
是否可以使用单个git 命令来完成?
【问题讨论】:
-
Quentin's answer 很好,但出于好奇,为什么你想这样做? (更典型的做法是
git checkout -b newbranch; git commit以便名称newbranch为您记住新的提交。) -
这正是我不想要的。我已经为自己构思了一个工作流程,我希望能够在我的开发分支上进行“备份提交”,而不是在分支本身上。在分离提交之后,我只是
git tag BAK-change-foobar-schema并推送它。 – 这样我就可以备份我当前的工作而不使我的开发分支“脏”(并且在git-resetting 备份并继续并提交最终提交之后不必push force覆盖它) . – 所以我知道我的分支只有“真实”commitments 并且不包含 WIP 代码。 -
啊:你想提交以便可以标记提交(使用标记来记住哈希 ID)。没关系,但请注意,例如,您也可以
git checkout -b temp; git commit; git tag ...; git checkout master; git branch -D temp。您的分支名称是yours,因此您可以对它们做任何您喜欢的事情。 detach-and-commit-and-tag 简短而有用。这是你可以放入脚本或 Git 别名的东西。 -
(不过,我认识的每个人都只使用私有开发分支。有一个很好的理由避免在 shared 存储库中使用标签名称:标签名称被复制到其他克隆,而分支名称只是成为人们可以忽略的远程跟踪名称。显然这不适用于 private 存储库。)
-
是的,但我不喜欢维护那个
temp分支???? (我倾向于忘记周围的污垢),--detach选项有助于解决此问题;而且我通常会尽量避免使用别名(例如,在远程系统上我没有得到)。 - 我看到的方式,这个提交首先不应该在分支中(或者根本不应该在分支中);它只是一个备份:一个存储代码但不应该具有历史意义的提交。
标签: git git-branch git-commit git-detached-head git-dangling