小编典典

推送后更改 git commit 消息(假设没有人从远程拉出)

all

我已经进行了 git commit
和后续推送。我想更改提交消息。如果我理解正确,这是不可取的,因为在我进行此类更改之前,有人可能已经从远程存储库中提取了。如果我知道没有人拉过怎么办?

有没有办法做到这一点?


阅读 145

收藏
2022-02-25

共1个答案

小编典典

改变历史

如果它是最近的提交,你可以简单地这样做:

git commit --amend

这会打开带有最后一条提交消息的编辑器,并允许您编辑该消息。(-m如果您想清除旧消息并使用新消息,则可以使用。)

推动

然后当你推动时,这样做:

git push --force-with-lease <repository> <branch>

或者你可以使用“+”:

git push <repository> +<branch>

或者您可以使用--force

git push --force <repository> <branch>

使用这些命令时要小心。

  • 如果其他人将更改推送到同一分支,您可能希望避免破坏这些更改。该--force-with-lease选项是最安全的,因为如果有任何上游更改,它将中止(

  • 如果您没有明确指定分支,Git 将使用默认推送设置。如果您的默认推送设置是“匹配”,那么您可能会同时销毁多个分支上的更改。

之后拉/取

任何已经拉取的人现在都会收到一条错误消息,他们需要通过执行以下操作进行更新(假设他们自己没有进行任何更改):

git fetch origin
git reset --hard origin/master # Loses local commits

使用时要小心reset --hard。如果您对分支进行了更改,这些更改将被销毁。

关于修改历史的说明

被破坏的数据实际上只是旧的提交消息,但--force不知道这一点,并且也会很高兴地删除其他数据。因此,可以将其想象--force为“我想销毁数据,并且我确定要销毁哪些数据”。但是当被破坏的数据被提交时,你通常可以从
reflog 中恢复旧的提交——数据实际上是 孤立 的而不是被破坏的(尽管孤立的提交会定期删除)。

如果您不认为自己在破坏数据,那么请远离--force……可能会发生坏事。

这就是为什么--force-with-lease更安全一些。

2022-02-25