我需要编辑提交消息。除此之外还有一些提交。有没有办法只编辑一个特定的提交消息?
尝试重新绑定并重新提交提交消息。但它不允许我推动。
抱怨 -
远程:为了防止您丢失历史记录,拒绝了非快进更新
答案 0 :(得分:1)
你不能安全地做你想做的事。
我将解释如何推动您的更改,但如果您使用该回购做其他所有人,则必须采取其他步骤进行恢复。 (有关进一步说明,请参阅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不会默认让您将origin/master
表单D
移动到D'
,因为它会破坏从{{1}克隆的任何其他存储库中所做的假设}}
你可以通过说
强制它让你推动你的改变origin
但如果你这样做:
1)之后你需要仔细检查在git push -f
之后没有其他任何人提交任何东西。如果他们这样做,您将不得不将这些更改重新定义到D
2)其他人必须采取额外措施,使用D'
重新分配其分支机构,并且必须将他们计划推送到origin
的任何本地更改重新绑定。 (如果他们反而强迫他们推,那么他们会将远程ref移回旧行 - 在master
恢复原始提交消息 - 你将处于破碎状态。你和任何正确切换的人到B
可能会丢失更改。如果允许这样做,这可能会非常混乱;因此您需要确保整个团队都采用正确的方式进行恢复来自上游的rebase。)
如果值得改变信息,那就是你做的。
答案 1 :(得分:0)
将提交推送到远程存储库后,编辑或删除该提交是一个坏主意,因为它会破坏之前从该遥控器中提取的任何人。如果您坚持这样做,git push -f
将覆盖此检查(除非远程存储库设置为禁止此操作)。