Git 合并分支但不包含某些文件

Git 合并分支但不包含某些文件,git,git-merge,Git,Git Merge,在我们公司,我们有alpha和beta,当我们即将发布一个新版本时,我们做了一个git合并alpha(在beta分支上),所以我们将所有alpha合并到beta中 这种方法的问题是,我们有一些配置文件不应该合并到beta中,它们只是alpha(和其他开发分支),但也不应该被git忽略,也不应该属于另一个存储库,因为它们毕竟属于那个特定的分支 因此,“理想”的解决方案是: git merge alpha-提交以忽略 或者只是将特定文件设置为仅在合并时忽略 不确定这些选项是否存在,或者它是否是最好的

在我们公司,我们有alpha和beta,当我们即将发布一个新版本时,我们做了一个git合并alpha(在beta分支上),所以我们将所有alpha合并到beta中

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

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

git merge alpha-提交以忽略

或者只是将特定文件设置为仅在合并时忽略


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

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

git merge -s ours alpha
否则,最简单的解决方案是从alpha创建一个新分支。删除不希望合并的配置文件,提交更改并将新分支合并到beta中。然而,如果您最终将beta合并到alpha中,那么使用这种方法,在快进合并的情况下,您也会丢失alpha中的配置文件


更可取的解决方案是在alpha中创建一个单独的提交,其中包含配置更改,现在您可以将分支的其余部分合并/重定基址到beta中,除了该提交


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

git checkout -b temp_branch HEAD~1
git checkout beta
git merge temp_branch
如果提交介于两者之间,则需要
重新设置基础--on
以删除该特定提交,然后合并。为了解释,假设你有

>> 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

“更可取的解决方案是在alpha中创建一个单独的提交,其中包含配置更改,现在您将分支的其余部分合并到beta中,除了该提交。”如果所有不需要的更改都在单个提交中,那么您可以这样做。