如何合并分支?

我们决定在我们公司使用GIT,但现在出了问题..我们有几个不同特点的分支机构。 现在我们需要将这些分支合并并推送给Master。 我们如何使用autoreplace来做到这一点 - 我们有分支-a,分支-b,分支-c-我们需要把它们全部放在Master中,但是在重复文件的情况下,分支-b应该是Major和branch-c-minor。

UPD:

branch-a:
-file1
-file2
-file3
-file4


branch-b:
-file1
-file5
-file6


branch-c:
-file1
-file2
-file7
-file8

我们需要结果:

Master:
-file1 (from b)
-file2 (from a)
-file3 (from a)
-file4 (from a)
-file5 (from b)
-file6 (from b)
-file7 (from c)
-file8 (from c)

执行章鱼合并,并且不提交'--no-commit'。 来自主人

git merge --no-commit branch-a branch-b branch-c

解决任何冲突,然后如果您想,请采取特定版本的文件并提交:

git checkout branch-b -- file3

重复其他特定文件。

git add . -A
git commit

这是您的自定义工作流程的工作方式。

希望这可以帮助。


我没有测试过,但这可能会做你想做的事情:

git checkout master
git merge -s recursive -X theirs branch-c
git merge -s recursive -X theirs branch-a
git merge -s recursive -X theirs branch-b

这是使用recursive合并策略,但是说如果在合并时有任何冲突,总是将它们解析为有利于合并到当前分支中的分支。 要查找相关文档,请查看git merge man page中的递归合并策略部分,以及该策略的ourstheirs选项。

这样做的问题是,如果您对每个分支中的文件所做的更改不会发生冲突,那么您将在一个分支和另一个分支中进行一些更改。 如果这不是你想要的(并且我承认我不太了解你的工作流程),你可能需要做的,例如:

git merge --no-commit branch-c

...然后在提交合并提交之前使用您想要手动手动创建的每个文件版本更新索引。 运行该命令后,可以找到两个分支上存在的所有文件:

comm -1 -2 <(git ls-tree -r --name-only master|sort) <(git ls-tree -r --name-only branch-c|sort) > common.txt

...然后选择每个branch-c版本:

xargs -n 1 git checkout branch-c -- < common.txt

...然后像往常一样提交git commit

只是重申一下,我敢肯定我绝对不想这么做 - git的默认合并行为几乎总是按我的意愿做,只留下真正的冲突来解决。


看起来你的答案在这里:http://book.git-scm.com/5_advanced_branching_and_merging.html hth

链接指向题为“高级分支和合并:在合并期间获得冲突解决帮助”的讨论

佩里

链接地址: http://www.djcxy.com/p/41719.html

上一篇: how to merge branches?

下一篇: needs merge, unable to refresh index