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



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

建筑

我有存储库"a",我在本地使用其远程"a"对应项开发我的应用程序。还有另一个远程存储库"b",其中包含我需要在我的"a"存储库中保持最新的文件;但是,我也需要保留自己的更改。

用例

我已经在存储库"a"的本地副本上将本地更改提交到主分支。我想从远程存储库"b"的主分支上的"components/config.js"获取最新代码,并将其与我对本地存储库"a"上的文件的更改合并在我的主分支上的同一等效目录("components/config.js")。

尝试合并文件失败

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

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

问题

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

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

您必须决定什么是基本版本。它是存储库"b"中的旧提交,假设它是提交"b-old"。现在,您在基本副本和更改的副本之间进行差异并保存差异:

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

然后将补丁移动到存储库"a"并将差异应用于当前版本:

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

解决合并冲突并提交。

最新更新