在 git 推送后更新提交消息

  • 本文关键字:更新 提交 消息 git git
  • 更新时间 :
  • 英文 :


我需要编辑提交消息。上面已经有一些提交。有没有办法只编辑特定的提交消息?

已尝试变基并改写提交消息。但它不允许我推动。

抱怨-

远程:为防止丢失历史记录,非快进更新被拒绝

你不能安全地做你想做的事情。

我将解释如何推送更改,但如果您这样做,使用该存储库的其他人将不得不采取其他步骤来恢复。 (有关进一步说明,请参阅git rebase文档;通常不应将已推送到远程的提交变基

。那么首先,这是为什么呢?

它与 git 如何存储和处理内容以及检测更改有关。 每个提交都有一个唯一的 ID,它是提交的 SHA1 哈希。 假设您从以下内容开始:

A --- B --- C --- D <--(master)(origin/master)

如果你在B上更改提交消息,计算的哈希必须改变 - 所以就 git 而言,你有一个新的提交(比如说B')与旧的非常相似。

A --- B --- C --- D <--(master)(origin/master)

B'

好吧,C的数据包括其父哈希(B,而不是B'),因此要有一个父B'的提交意味着您必须用新的提交C'替换C。 这将一直持续到 HEAD。

A --- B --- C --- D <--(origin/master)

B' --- C' --- D' <--(master)

现在 git 默认情况下不想让您将表单D移动到D'origin/master因为它会弄乱从origin克隆的任何其他存储库中所做的假设。

你可以强迫它让你推动你的改变

,无论如何都说
git push -f

但如果你这样做:

1)之后你需要仔细检查,在D掌握之后没有其他人犯过任何事。 如果他们这样做了,您将不得不将这些更改重新设置为D'

2)其他人将不得不采取额外的步骤来重新同步他们的分支与origin,并且还必须重新调整他们计划推送到master的任何本地更改。 (如果他们强制推送,那么他们会将远程引用移回旧行 - 在B恢复原始提交消息 - 您将处于损坏状态。 您和任何正确切换到D'的人都可能会丢失更改。 如果允许这样做,这可能会非常混乱地来回;因此,您需要确保整个团队都同意以正确的方式从上游变基中恢复。

如果改变消息值得所有这些,那就是你的做法。

一旦您将提交推送到远程仓库,编辑或删除该提交是一个坏主意,因为它会搞砸之前从该远程拉取的任何人。如果您仍然坚持这样做,git push -f将覆盖此检查(除非远程存储库设置为不允许这样做)。

最新更新