【问题标题】:How to git-commit from a branch to a detached HEAD?如何从分支 git-commit 到分离的 HEAD?
【发布时间】: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


【解决方案1】:

只需分离,然后提交:

git checkout --detach
git commit -m "Commit as usual"

【讨论】:

  • 我知道! ? 我想到了 detach 选项,但在 man git-commit 上找不到它。谢谢!
【解决方案2】:

如果HEAD 直接指向提交123abc,则它已经处于分离的HEAD 状态而不是foogit commit 将创建一个新的提交并将 HEAD 移动到新的提交中,而 foo 不移动。

如果HEAD 指向refs/heads/foorefs/heads/foo 指向123abc,您可以运行git checkout 123abc 然后进行提交。

【讨论】:

  • 是的,你是对的,我应该解决这个问题,意思是HEAD指向分支foo,而不是直接提交本身。
  • 很好的答案,但我选择了@Quentin 中的那个,因为它允许执行我要求的操作,而无需知道refs 或提交SHA。谢谢你!
【解决方案3】:

您可以只提交然后进行重置:

# from foo branch
git commit -m 'your work here'
git reset --soft HEAD~1

这会将 HEAD 指针移回一个提交到 123abc,但也会暂存该提交中的所有工作。

还有其他类型的重置(混合、硬),它们是上述的变体。在不知道您的最终目标的情况下,不清楚您应该使用哪种重置方式。不过,一般来说,如果您想重写之前的 HEAD 提交,则将 HEAD 移回一个提交。

【讨论】:

  • 是的,这是合法的,也是我通常做的,谢谢。在这种情况下,我特别要求提交而不推进分支。我正在寻找@Quentin 的回答中描述的内容。
猜你喜欢
  • 1970-01-01
  • 2019-11-09
  • 2014-11-14
  • 1970-01-01
  • 2014-04-17
  • 2011-08-28
  • 2018-04-28
  • 2014-03-17
  • 2021-12-14
相关资源
最近更新 更多