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



我在几年前写了一个简单的CMS,现在我有多个分支机构,我想更新一个从所有分支中使用的文件,并且没有更改,因为从版本1开始。p>那么如何更新此文件并告诉所有分支机构执行此操作?

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

取决于您的优先级。

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

当然,下边是很多合并操作。如果有很多分支机构,那么应用所有合并可能会很乏味(尽管您可以自动化它,从而指出您正在修改从未更改的文件,以免发生任何冲突)。这些合并也添加到每个分支的历史记录中。对我来说,这不是一件坏事 - 这再次是准确的历史 - 但是有些人确实不喜欢"复杂"的拓扑。因此,这是您可能会选择的。

另一个选择是重写历史记录。这有几个潜在的侧面。您所有的提交ID值都会改变。如果您在任何类型的工具或文档中使用提交ID,则可能是一个问题。而且,如果还有其他带有回购克隆的用户,他们将不得不从本质上从大量的"上游重击"状态恢复过来。再加上您的重写历史记录不会反映出历史上任何时刻的真正外观。但是,如果您不在乎那些事情,那么这会更容易做到并避免更改提交拓扑。

因此,最简单的方法就是filter-branch

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

您可能可以解决一种使用index-filter而不是tree-filter的方法,这会更快 - 但不太容易。

最新更新