有没有办法说服Git合并文件之间的变化,而不是分支?

时间:2014-12-09 04:53:49

标签: git

说我有一个文件foo.txt。我决定要bar.txt foo.txt,就像bar一样,但对其中的一部分进行了一些重大更改。

如果我创建一个分支foo.txt,并在那里进行那些更改(可能包括重命名),我可以使用`git merge将bar.txt的更改合并到foo。 / p>

另一方面,如果我只复制文件,使bar和{{1}}是同一分支中的不同文件,是否有办法保持[某些]更改在它们之间保持同步?

“正确”的选择是使代码更加模块化,删除重复的代码 - 但假设这不是一个可用的解决方案,有没有办法实现这个?

2 个答案:

答案 0 :(得分:2)

使用git merge-file

git merge-file <current-file> <base-file> <other-file>
  

git merge-file包含了从中引出的所有更改   &LT;碱文件&gt;到&lt; other-file&gt;进入&lt; current-file&gt;。该   结果通常会进入&lt; current-file&gt;。 git merge-file是   用于将单独的更改组合到原始文件中。假设   &LT;碱文件&gt;是原始的,并且&lt; current-file&gt;和   &lt;其他-文件&gt;是&lt; base-file&gt;的修改,然后是git   merge-file结合了这两个变化。

在你的情况下,你可以创建一个空的和一个git合并文件,

git merge-file foo.txt empty.txt bar.txt

foo.txt是您的合并文件

答案 1 :(得分:2)

不,这是不可能的,除非你在分歧之前有你的文件的基本版本

Git总是在合并中使用三种文件状态:基本文件C,版本A和版本B.然后有效地添加C和A之间的差异,以及C和B,在文件C上重放它们。除非你有三个不同的输入文件,输出将始终是文件A或文件B而不做任何更改。