我们的git repo在其历史记录中有一堆不再需要的大文件。我想使用Pro Git中解释的过滤器分支技术删除它们:
http://git-scm.com/book/en/v2/Git-Internals-Maintenance-and-Data-Recovery
然后我会使用git push --force all
将此信息发送到我们的共享仓库,如下所述:
Update a development team with rewritten Git repo history, removing big files
BUT。 Pro Git说,自从我改变历史以来,我需要让每个人都坚持下去。我们只是谨慎使用rebase,通常只是作为合并的替代方式。我可以让每个人重新克隆,但这是最后的手段;几个开发者都有当地的分支机构,他们希望保留这些变化。
那么:在我们的本地存储库中,每个人都需要做什么才能重新定义到新更改的共享仓库?每个跟踪分支我们必须做一次吗?我们的回购被称为原产地,而主要的分支是主要的,如果你想逐步提供(如果你愿意,我会喜欢它)。
答案 0 :(得分:15)
关键是每个开发人员在完成他们的rebase之前不要丢失他们对master
的原始引用。为此,让他们在强制推送后执行fetch
(不拉动),然后对每个本地分支执行:
git rebase --onto origin/master master <local_branch>
完成后,他们可以查看他们的master
并通过以下方式更新:
git pull --force
答案 1 :(得分:3)
这是一个选项。
rebased_master
的分支(而不是原始master
)上创建您的重定向主数据。 rebased_master
。如果他们将它们从rebase之前的等效提交中重新绑定,并且没有对要删除的文件进行任何更改,则所有都应该。 rebased_master
后,您可以删除原始master
和move rebased_master
至master
注意:我没有对此进行测试,因此请确保您有一份repo副本,以便在出现问题时进行恢复。