我正在关注此文档以修改已推送的提交消息。我现在有我的本地分支包含修改后的消息,以及修改后的所有提交的副本。
我确信其他人已经撤回了这些提交。
推送我的本地分支是否安全?对其他人会有什么后果?
如果您修改了任何提交,则意味着您已经重写了该分支的历史记录。请注意,仅更改提交消息意味着 Git 创建了一个新提交来代替旧提交。我不知道你是否使用了交互式 rebase、filter branch 或git commit --amend,但它不会改变太多情况。
推送这个分支的后果是,其他使用这个分支的人在尝试拉取时可能会得到一个合并提交。原因如下图所示:
remote: A -- B -- C -- E # you rewrote D to C
local: A -- B -- D -- E
Run Code Online (Sandbox Code Playgroud)
当您的一位同事尝试拉取时,Git 会发现B提交是本地和远程分支之间的共同祖先。它将首先尝试使用 快进本地分支C -- E,但随后意识到这也是不可能的,因为本地分支已经发散并且在 之上有自己的一组提交B。因此,Git 最终将创建一个包含远程更改的合并提交。但这将包括提交C和D,这可能会导致奇怪。
发生这种情况的唯一例外是自提交B或更早以来没有拉过分支的人。在这种情况下,这样的人不会注意到你重写了那个提交,因为他的本地历史首先不知道这个提交。
请注意,如果您想继续,您的同事可能想要这样做:
git fetch origin # update tracking branches
git reset --hard origin/master # reset local master to remote (effectively overwrite)
Run Code Online (Sandbox Code Playgroud)