在filter-branch之后将每个人重新更改为更改的git历史记录

时间:2011-09-26 22:15:46

标签: git

我们的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,通常只是作为合并的替代方式。我可以让每个人重新克隆,但这是最后的手段;几个开发者都有当地的分支机构,他们希望保留这些变化。

那么:在我们的本地存储库中,每个人都需要做什么才能重新定义到新更改的共享仓库?每个跟踪分支我们必须做一次吗?我们的回购被称为原产地,而主要的分支是主要的,如果你想逐步提供(如果你愿意,我会喜欢它)。

2 个答案:

答案 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后,您可以删除原始mastermove rebased_mastermaster

注意:我没有对此进行测试,因此请确保您有一份repo副本,以便在出现问题时进行恢复。