答案 0 :(得分:2)
如果您修改了任何提交,那么这意味着您已经重写了该分支的历史记录。请注意,只更改提交消息意味着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将最终使用远程更改创建合并提交。但这包括提交C
和D
,这可能会导致奇怪。
发生这种情况的唯一例外是自提交B
或更早版本以来未撤销分支的人。在这种情况下,这样的人不会注意到你重写了那个提交,因为他的本地历史一开始就不知道这个提交。
请注意,如果您希望继续,您的同事可能希望这样做:
git fetch origin # update tracking branches
git reset --hard origin/master # reset local master to remote (effectively overwrite)