我需要编辑提交消息。上面已经有一些提交。有没有办法只编辑特定的提交消息?
已尝试变基并改写提交消息。但它不允许我推动。
抱怨-
远程:为防止丢失历史记录,非快进更新被拒绝
你不能安全地做你想做的事情。
我将解释如何推送更改,但如果您这样做,使用该存储库的其他人将不得不采取其他步骤来恢复。 (有关进一步说明,请参阅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
将覆盖此检查(除非远程存储库设置为不允许这样做)。