是否可以更新git版本控件中所有分支的文件?

时间:2017-12-27 13:36:42

标签: git github version-control

我多年前写了一个简单的CMS,现在我有多个分支用于这个CMS,我想更新一个从所有分支使用的文件,并且自版本1以来没有更改。

那么如何更新此文件并告诉所有分支机构呢?

2 个答案:

答案 0 :(得分:3)

您应该创建一个新分支来对文件进行更改。然后,您可以将该分支合并到所有其他分支。这会将所有更改从新分支添加到您合并它的每个分支。

答案 1 :(得分:2)

取决于您的优先事项。

由于该文件以前从未更改过,因此首次添加该文件的提交应该是一个合适的"公共根"您可以在其中创建新分支以应用更改;然后将其合并到所有分支。这种方法最能反映项目的真实历史。

当然,缺点是它有很多合并操作。如果有很多分支,那么应用所有合并可能会很繁琐(尽管你可以自动化它,依靠你修改一个从未改变的文件的想法,所以你不应该有任何冲突)。这些合并也会添加到每个分支的历史记录中。对我而言,这不是一件坏事 - 它再次成为准确的历史 - 但是有些人不喜欢"复杂的"提交拓扑;所以你可能会选择考虑它。

另一种选择是重写历史。这有几个潜在的缺点。您的所有提交ID值都将更改。如果您在任何类型的工具或文档中使用提交ID,则可能是一个问题。如果有其他用户拥有回购的克隆,他们将不得不从基本上大量的"上游rebase"类似条件中恢复。此外,您的重写历史记录无法反映代码在历史记录中的真实情况。但如果您不关心这些事情,那么这样做更容易,并且避免更改提交拓扑。

所以最简单的方法是使用filter-branch

git filter-branch tree-filter='cp /some/path/to/new/version worktree/path/to/old/version' -- --all

你可能想办法使用index-filter代替tree-filter,这会更快 - 但不是那么容易。