合并分支但遗漏某些文件
Merging branches but leaving out certain files
在我们公司,我们有 alpha 和 beta,当我们要发布新版本时,我们会 git 合并 alpha(在 beta 分支上),所以我们将所有 alpha 合并到 beta。
这种方法的问题是我们有一些配置文件不应该合并到测试版中,它们只是 alpha(和其他开发分支),但不应该 git 忽略,也不应该属于另一个存储库,因为毕竟它们确实属于那个特定的分支。
因此,"ideal" 解决方案是:
git 合并 alpha -commit-to-ignore
或者只设置合并时忽略的特定文件。
不确定这些选项是否存在,或者它是否是最佳方法。
如果分支 alpha 和 beta 中的配置文件更改是互斥的,即它们会导致冲突,那么您可以使用 ours
合并策略
简单地合并它
git merge -s ours alpha
否则,最简单的解决方案是从 alpha 创建一个新分支。删除不想合并的配置文件,提交更改并将新分支合并到 beta 中。但是,使用这种方法,如果您最终将 beta 合并到 alpha,那么在 Fast-Forward Merge 的情况下,您也会丢失 alpha 中的配置文件。
更可取的解决方案是在 alpha 版中创建一个单独的提交,其中包含配置更改,现在您可以 merge/rebase 除了该提交之外的分支的其余部分进入 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
在我们公司,我们有 alpha 和 beta,当我们要发布新版本时,我们会 git 合并 alpha(在 beta 分支上),所以我们将所有 alpha 合并到 beta。
这种方法的问题是我们有一些配置文件不应该合并到测试版中,它们只是 alpha(和其他开发分支),但不应该 git 忽略,也不应该属于另一个存储库,因为毕竟它们确实属于那个特定的分支。
因此,"ideal" 解决方案是:
git 合并 alpha -commit-to-ignore
或者只设置合并时忽略的特定文件。
不确定这些选项是否存在,或者它是否是最佳方法。
如果分支 alpha 和 beta 中的配置文件更改是互斥的,即它们会导致冲突,那么您可以使用 ours
合并策略
git merge -s ours alpha
否则,最简单的解决方案是从 alpha 创建一个新分支。删除不想合并的配置文件,提交更改并将新分支合并到 beta 中。但是,使用这种方法,如果您最终将 beta 合并到 alpha,那么在 Fast-Forward Merge 的情况下,您也会丢失 alpha 中的配置文件。
更可取的解决方案是在 alpha 版中创建一个单独的提交,其中包含配置更改,现在您可以 merge/rebase 除了该提交之外的分支的其余部分进入 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