如果我正确理解您的问题,那么您无法将更改推送到远程存储库,因为您的本地历史记录与远程历史记录不匹配。当您使用
rebase
或
filter branch
在本地更改提交时,通常会发生这种情况。
如果您将本地更改推送到远程,则会重写项目的某些或全部历史记录。这意味着您项目中的每个开发人员在尝试执行
git pull
时都会遇到问题,因为现在他们的本地历史记录与远程历史记录不同。在这种情况下,通常希望向共同开发人员发送有关此情况的消息,因为如果他们不知道您的
filter-branch
所做的内容,这可能会非常令人困惑并且耗时。
话虽如此,我认为您正在寻找
git push
的
--force
选项。您需要运行
git push --force origin master
。正如名称所示,这将用您的本地 git 历史记录覆盖远程存储库中的任何内容。
在执行此操作之前,请阅读
文档并提出更多问题,因为这是一项具有潜在破坏性的操作。
编辑:
据我所知,你的同事有两个选项。他们可以选择使用fetch/reset
或者rebase
。
fetch/reset
的方法是将同事的本地存储库重置为与远程存储库完全相同。可以通过以下方式完成:
git fetch origin && git checkout master
git reset --hard origin/master
rebase
路线意味着将您的同事的本地提交应用于新清理的主分支之上。在交互模式下,他们将有机会在包含该提交之前审查每个提交。如果提交包含您想要删除的文件,则可以简单地省略它。可以使用以下命令完成此操作:
git fetch
git rebase -i origin/master
如果您两个人都同意您的存储库应该是规范的,则第一种选项更可取,因为它更快。转而采用第二种方法可以使您获得更精细的控制。
您可以查看这个 SO 问题,更全面地解决强制推送后拉取的问题:
git pull after forced update