2017-12-27 425 views

回答

2

取决于您的优先级。

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

当然,不利的一面是它有很多合并操作。如果有很多分支机构,则应用所有合并可能非常繁琐(尽管您可以自动化它,依赖于您正在修改一个永不改变的文件的想法,因此您不应该发生任何冲突)。这些合并也被添加到每个分支的历史记录中。对我来说这不是一件坏事 - 它又是准确的历史 - 但有些人不喜欢“复杂”的提交拓扑;所以这是你可能要考虑的事情。

另一种选择是重写历史记录。这有几个潜在的缺陷。所有的提交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,这将是更快 - 但不是很容易。

3

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

+3

该分支应该从最早的常见提交开始。 – Philippe

相关问题