合并来自不同分支/目录的特定文件

时间:2019-04-02 11:13:03

标签: git

我有两个GIT分支: 与Pluto / test.txt B与Pippo / test.txt

我只希望将分支B中的文件(test.txt)合并到A中。

我尝试使用:

git checkout A
git checkout B Pippo/test.txt

但这会创建一个包含文件的文件夹,例如: 带有Pluto / test.txt和Pippo / test.txt。 但是我想合并文件

2 个答案:

答案 0 :(得分:2)

尝试git merge-file。它以三向合并的方式合并两个文件。

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

在您的情况下,current-file是A的Pluto/test.txtother-file是B的Pippo/test.txt。对于base-file,您可以发现Pluto/test.txt首次引入了A的哪个提交git log A --reverse -- Pluto/test.txt。输出中的第一个提交就是我们想要的,并假设它是abc123

检出分支A,以便有current-file

git checkout A

检索base-file

git cat-file -p abc123:Pluto/test.txt > base.txt

检索other-file

git cat-file -p B:Pippo/test.txt > other.txt

运行三向文件合并。

git merge-file Pluto/test.txt base.txt other.txt

打开Pluto/test.txt。如果有任何冲突,请解决。保存并退出。添加并提交更改。

git add Pluto/test.txt
git commit

清洁base.txtother.txt

rm base.txt other.txt

答案 1 :(得分:1)

git不会合并路径不同的文件。

如果两个文件都在相同的确切路径上,但是分支上的路径不同,则可能会发生文件合并

但是,即使您在每个分支中都拥有Pluto/test.txt,将B合并为A也不一定会导致合并。如果它们都在同一位置(代码块)与merge base不同,将

也许考虑使用任何合并工具进行手动合并,然后在所需的分支上提交这些更改?