git:仅合并文件选择

问题描述:

我们正在开发嵌入式项目。 目前,我们有一个工作硬件与控制器A. 后来,最终产品将有一个新的硬件与控制器B. 我目前正在实施分支1的业务逻辑,使用我们的旧硬件与控制器A. 我的同事们正在为分支2上的控制器B移植软件。他们正在调整所有低级别的东西,设备驱动程序,HAL和东西。git:仅合并文件选择

不久,我们将有1处合并到分支2

然而,我们只希望合并文件的一小部分。 尝试合并设备驱动程序是没有意义的。在控制器B上,我们将拥有完全不同的设备驱动程序和HAL。 另外,合并与电路板有关的配置文件是没有意义的。

但是当我在分支2上运行“git merge 1”时,我会得到很多合并冲突,因为git会尝试合并每个文件。 我需要一些方法来选择我想合并的一组文件。

我现在的解决方案是不使用“git merge”功能。 相反,我创建了两个本地存储库,分支1上的一个和分支2上的一个。 然后,我可以使用一些随机difftool并手动合并文件选择。 但是,有了这个解决方案,git不会知道我做了合并。 此外,分支树视图不会反映我的“合并”。

那么,有没有办法实现我想要的?

+0

为什么你不能签出两个分支,将你想要的文件复制到分支B中,覆盖那里的文件,提交。当然,你必须知道你正在使用哪些文件。 – Lundin

+0

我可以,但这个“合并”不会反映在git的可视化树视图中。从git观点来看,这不是一个合并,而是一个通常的提交。 – lugge86

+0

我没有看到这个问题。关闭一个分支并说它不再被维护。 “修订树的视觉吸引力”是无关紧要的。 – Lundin

您使用cherry-pick命令从一个分支中获取单个提交。

如果您想要的更改不在单个提交中,则使用此处显示的方法将提交拆分为单个提交。粗略地说,你使用git rebase -i获取原始提交进行编辑,然后git重置HEAD ^选择性还原更改,然后git提交将该位提交为历史记录中的新提交。

在Red Hat杂志中还有另一个不错的方法,在这里他们使用git add --patch或可能的git add --interactive,如果您想要将不同的更改拆分为单个文件(在该页面中搜索“分割”)。

把这些变化分开后,你现在可以挑选你想要的。