合并分支但省略某些文件

时间:2017-03-28 09:00:47

标签: git git-merge

在我们公司,我们有alpha和beta,当我们即将发布新版本时,我们会进行git merge alpha(在beta分支上),所以我们将所有alpha合并到beta版。

这种方法的问题是我们有一些配置文件不应该合并到beta中,只有alpha(和其他开发分支),但不应该被git忽略,也不属于另一个存储库,因为之后所有这些都属于那个特定的分支。

因此,“理想”解决方案将是:

git merge alpha -commit-to-ignore

或仅在合并时设置要忽略的特定文件。

不确定这些选项是否存在,或者它是否是最佳方法。

1 个答案:

答案 0 :(得分:1)

如果分支alpha和beta中的配置文件中的更改是互斥的,即它们会导致冲突,那么您可以使用ours合并策略简单地合并它

git merge -s ours alpha

否则,最简单的解决方案是从alpha创建一个新分支。删除您不想合并的配置文件,提交更改并将新分支合并到测试版中。但是,使用这种方法,如果你最终将beta合并到alpha中,那么在快进合并的情况下,你也会松散alpha中的配置文件。

更优选的解决方案是在alpha中创建一个包含配置更改的单独提交,现在您可以将该分支的其余部分合并/转换为beta,除了提交。

如果配置文件中的更改是最新提交,那么您可以按照以下方式轻松完成

git checkout -b temp_branch HEAD~1
git checkout beta
git merge temp_branch

如果提交介于两者之间,则需要rebase --onto删除该特定提交,然后合并。为了解释,让我们说你有

>> git log --oneline
2c10ba8 latest commit
088a38e config commit
c233f51 some other commit

>> git checkout -b temp_branch

# Now you need to remove 'config commit' with hash id 088a38e
>> git rebase --onto c233f51 088a38e 2c10ba8
# resolve if any conflict occurs

# Now your git log should look like shown below, with undesirable commit removed
>> git log --oneline
2c10ba8 latest commit
c233f51 some other commit

>> git checkout beta
>> git merge temp_branch