Git从另一个远程仓库中提取/合并一个文件并合并其代码而不是替换它

时间:2018-01-15 22:30:13

标签: git

我已经阅读了许多关于将文件拉入的帖子和文章 - 以各种方式 - 但它们似乎都没有按照我需要的方式合并。

建筑

我有回购“a”,我在本地使用其远程“a”对应物开发我的应用程序。还有另一个远程仓库“b”,它有我需要在我的“a”仓库保持最新的文件;但是,我也需要保持自己的变化。

使用案例

我已将本地更改提交到我的本地副本“a”上的主分支。我想从远程repo“b”的主分支上获取“components / config.js”的最新代码,并将它与我对本地repo“a”上的文件的更改合并到同一目录中(“我的主分支上的components / config.js“)。

合并文件的尝试失败

我不能git pull --allow-unrelated-histories remote-b master,因为它会导致其他文件冲突(或添加/删除文件),我只想关注文件。

我可以git fetch remote-b然后git checkout FETCH_HEAD -- components/config.js,但这只是替换文件内容而不是合并。

问题

我仍然无法将另一个远程仓库中的一个指定文件的代码合并(不替换)到另一个仓库中的本地文件等效文件中。

1 个答案:

答案 0 :(得分:0)

要合并文件,您需要3个不同的文件副本 - 基本版本,更改版本和要合并的当前版本。你只谈了2份 - 在回购" a"和" b"。

你必须决定什么是基本版本。这是回购中的旧承诺" b",让我们说它的承诺" b-old"。现在你在基础和更改的副本之间进行差异并保存diff:

cd repo-b
git diff b-old:components/config.js components/config.js > ../config.js.patch

然后你将补丁移动到回购" a"并将diff应用于当前版本:

cd repo-a
git apply ../config.js.patch

解决合并冲突和提交。