git推送后更新提交消息

git推送后更新提交消息,git,Git,我需要编辑提交消息。除此之外,还有一些提交。有没有办法只编辑特定的提交消息 尝试重新设置提交消息的基址并重新编写。但它不允许我推 抱怨- 远程:为了防止您丢失历史记录,非快进更新被拒绝一旦您将提交推送到远程存储库,编辑或删除该提交是一个坏主意,因为它会使以前从该远程存储库中提取的任何人陷入混乱。如果您仍然坚持这样做,git push-f将覆盖此检查(除非远程存储库设置为不允许这样做)。您无法安全地执行您尝试执行的操作 我将解释如何推动您的更改,但如果您这样做,其他使用该回购的人将不得不采取其他步

我需要编辑提交消息。除此之外,还有一些提交。有没有办法只编辑特定的提交消息

尝试重新设置提交消息的基址并重新编写。但它不允许我推

抱怨-


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

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

您无法安全地执行您尝试执行的操作

我将解释如何推动您的更改,但如果您这样做,其他使用该回购的人将不得不采取其他步骤进行恢复。(有关进一步的解释,请参阅
git-rebase
文档;一般来说,您不应该对已推送到远程服务器的提交进行rebase。)

首先,为什么会这样

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

A --- B --- C --- D <--(master)(origin/master)
好的,
C
的数据包括它的父散列(它是
B
,而不是
B'
),因此要有一个其父是
B'
的提交,意味着你必须用一个新的提交
C'
替换
C
。这将一直持续到头部

A --- B --- C --- D <--(origin/master)
 \
  B' --- C' --- D' <--(master)
但如果你这样做了:

1) 您需要再次检查
D
之后是否没有其他人向master提交任何内容。如果他们这样做了,您必须将这些更改重新设置到
D'

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

如果改变信息值得这么做,那你就是这么做的

A --- B --- C --- D <--(origin/master)
 \
  B' --- C' --- D' <--(master)
git push -f