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

Jay*_*itt 12 git

我们的git repo在其历史中有一堆不再需要的大文件.我想使用Pro Git中解释的过滤器分支技术删除它们:

http://git-scm.com/book/en/v2/Git-Internals-Maintenance-and-Data-Recovery

然后我会用git push --force all它发送到我们的共享仓库,如下所述:

使用重写的Git repo历史记录更新开发团队,删除大文件

但.Pro Git说,自从我改变历史以来,我需要让每个人都坚持下去.我们只是谨慎使用rebase,通常只是作为合并的替代方式.我可以让每个人重新克隆,但这是最后的手段; 几个开发者都有当地的分支机构,他们希望保留这些变化.

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

Kar*_*ldt 17

关键是每个开发人员master在完成他们的rebase之后不要丢失他们的原始引用.要做到这一点,让他们在强制推送后执行fetch(而不是拉动),然后对每个本地分支执行:

git rebase --onto origin/master master <local_branch>
Run Code Online (Sandbox Code Playgroud)

完成后,他们可以签出他们master并通过以下方式更新它:

git pull --force
Run Code Online (Sandbox Code Playgroud)


And*_*ndy 3

这是一个选项。

  • rebased_master在名为(而不是原来的)的分支上创建重新基址的 master master
  • 您可以推送该分支,然后让所有开发人员将其拉下来并将其本地分支重新建立到rebased_master. 如果他们根据变基之前的等效提交对它们进行变基,并且对您要删除的文件没有任何更改,那么一切都应该很好。
  • 一旦每个人都将他们的开发分支移至,您可以删除rebased_master原始分支master移至 rebased_mastermaster

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