您的位置:首页 > 编程语言 > PHP开发

git merge 分支 合并 策略

2018-08-25 18:21 1446 查看

场景需求

主分支(master)合并特性分支(dev)的更改到主分支,同时忽略其中某些文件。比如说忽略配置文件,这个比较常见。

为了解决这个问题,我们可以利用 git 提供的合并策略来实现。

创建并开启自定义驱动

master# git config --global merge.ours.driver true

配置驱动策略

master# echo 'index.php merge=ours' >> .gitattributes
master# git add .gitattributes
master# git commit -m 'chore: Preserve index.php during merges'

查看策略配置

master# ls -al
master# cat .gitattributes
index.php merge=ours

测试合并策略

master# git checkout dev
dev# git rebase master
这里有冲突解决冲突,然后合并index.php,
再修改index.php中的内容和master中的index.php内容不同,待会儿查看结果。
dev# git checkout master
master# git merge -s ours dev

查看结果

master主分支和dev分支的index.php内容不同,

dev分支index.php并没有合并到master分支中,说明我们的合并策略生效。

注意问题

如果是要忽略目录,比如是src/,需要写成src/**,这点和.gitignore中的写法略有区别

如果采用rebase方式合并,一定要注意启用 git config --global pull.rebase true

目的分支(master)内容可以合并到参考分支,参考分支(dev)中被加入到合并策略的文件不会合并到目的分支,

也就是说 master 中的可以合并到dev,dev中的不能合并到master,这也是我们的初衷。

参考文档

https://www.jianshu.com/p/cec1539c0a33

https://segmentfault.com/a/1190000004965378

https://git-scm.com/docs/git-merge#_description

https://git-scm.com/docs/gitattributes

https://blog.yowko.com/2017/05/git-attributes-merge-strategy.html?m=1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  PHP Git re-base