修改旧的推送提交消息是否安全?

Is it safe to amend old pushed commit message?

我正在关注 this 文档以修改已推送的提交消息。现在我的本地分支包含修改后的消息,以及修改后的所有提交的副本。

我确信其他人已经撤回了这些提交。

推送本地分支安全吗?对其他人会有什么影响?

如果你修改了任何 commit那么这意味着你已经重写了那个分支的历史。请注意,仅更改提交消息意味着 Git 创建了一个 new 提交来代替旧的提交。我不知道你是否使用了交互式 rebase、过滤器分支或 git commit --amend,但它不会改变这种情况。

推送此分支的后果是使用此分支的其他人在尝试拉取时可能会得到合并提交。原因可以看下图:

remote: A -- B -- C -- E       # you rewrote D to C
local:  A -- B -- D -- E

当您的一位同事尝试拉取时,Git 会发现 B 提交是本地和远程分支之间的共同祖先。它会首先尝试用 C -- E 快进本地分支,但随后意识到这也是不可能的,因为本地分支已经分叉并且在 B 之上有自己的一组提交。结果,Git 将最终创建一个包含远程更改的合并提交。但这将包括提交 CD,这可能会导致奇怪。

发生这种情况的唯一例外是自提交 B 或更早以来未拉出分支的人。在这种情况下,这样的人不会注意到你重写了那个提交,因为他的本地历史一开始就不知道这个提交。

请注意,如果您想继续,您的同事可能想这样做:

git fetch origin                 # update tracking branches
git reset --hard origin/master   # reset local master to remote (effectively overwrite)