git合并分支但只接受对特定路径的更改

时间:2014-01-17 12:21:02

标签: git svn version-control merge

前段时间我开始使用git svn。现在我在分支A中实现了一些功能。我想合并到分支B.分支A和B的结构如下:(注意,这不是项目意义上的子模块)。

A 
  /module0
  /module1
  .
  .
  .
  /module15
B 
  /module0
  /module1
  /module2
  /module3

分支B是从subversion分支创建的新分支。

git checkout remote/... -b B

svn远程分支和svn trunk(A)中的模块0-3已在几年前拆分并手动修补(没有svn合并信息),因此有很多变化。

我的目标是将模块0中的一些更改从A合并到B.最好通过git merge,以便稍后将更容易合并未来的更改。我已经发现合并单个目录不起作用,所以这就是我所做的:

git checkout B
git merge A

导致HUUUUUUUUUUUGE冲突和分支B中的额外12个模块。

我不确定如何正确地从这里开始。

git rm -rf moduleX所有不必要的模块,并尝试通过

摆脱module1-4中的更改
git checkout --ours /moduleX

但是git报告仍会合并这些模块中的冲突以及一些修改过的文件,因为它们只在A中更改,但我不希望这些更改。

另外我已经考虑过樱桃采摘,但这似乎也很痛苦。

1 个答案:

答案 0 :(得分:0)

我认为你的方法非常接近。我将git checkout更改为:

git checkout HEAD -- moduleX

这将检出每个文件的“我们的”版本,包括每个成功自动合并的文件。我认为,使用--ours只会将“冲突”文件还原到版本B。 (另外,您可以使用BHEAD,更容易;他们会解析为相同的SHA-1,因为您要合并到分支B中,以便HEAD只是B的另一个名称。)

根据需要经常检查git status,以确保您只拍摄了所需的部分。