Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Git 自定义 merge 合并策略 #180

Open
yanyue404 opened this issue Sep 4, 2020 · 0 comments
Open

Git 自定义 merge 合并策略 #180

yanyue404 opened this issue Sep 4, 2020 · 0 comments

Comments

@yanyue404
Copy link
Owner

yanyue404 commented Sep 4, 2020

目录

注意事项

1、pull 配置

# 所有的 pull 命令都按 rebase 的方式执行
git config --global pull.rebase true

2、merge 配置

需配置如下:

# 创建自定义 merge driver
git config --global merge.ours.driver true

why?

uat 分支上的 project.config.json、fetch.js、app.js 与 prod 分支上的这几个配置性文件不一致。如果直接 执行 merge 就会使用 uat 分支替换所有 prod 的文件。

而做出如上配置后(加上已有的 .gitattributes忽略项)再进行 merge uat 分支上的 project.config.json、fetch.js、app.js 就不会被合并了,prod 会保持自己原先的配置不变。

# .gitattributes 文件(位于项目根目录)
project.config.json merge=ours
fetch.js merge=ours
app.js merge=ours

注意: 只能 master 合并其他分支时忽略其他分支上的文件, 其他分支合并 master 无法忽略 master 上的文件,所以这样的操作只能是单向有效。 (master 为默认主分支,即我们项目里的 prod)

我们的分支模型

主线分支

  • prod: 产品分支,对应产品服务器环境 (master)
  • uat: 测试分支,对应测试服务器环境 (dev)

uat 与 prod 为两个的独立程序,uat 为测试版本,prod 为正式版。不能直接在两个分支进行开发,只能通过分支合并的方式并入。

uat 分支可以只能通过 develop-xxx 与 hotfix-xx_xx 分支并入。
prod 分支可以通过 uat 与 hotfix-xx_xx 分支并入,发布的时候只能使用 uat 分支合并。

开发分支

  • develop-yue:个人开发分支(仅服务于 uat)
  • develop-joe: 个人开发分支(仅服务于 uat)
  • devlop-li: 个人开发分支(仅服务于 uat)

个人开发分支应保证与 uat 分支同步并且只能优于 uat,个人开发分支开发完成 push 后,以 rebase 的方式 merge 到 uat(可以使得 uat 的提交日志清晰)。

辅助分支 (临时性)

  • hotfix_xxxx: 热更新分支 (服务于 uat 与 prod)

hotfix 用于修复 uat 或 prod 出现 的 bugs,基于 uat 分支签出,bug 修复完成后并入 uat 和 prod 分支。

开发场景

自己的分支 develop-yue

创建分支:

# 基于 uat 分支签出新的开发分支
git checkout -b develop-yue uat

开发完成后合并:

注意: 先将修改提交到自己的分支

# 先切换 uat 拉取最新 code,因为 merge 的时候选取的是本地分支
git checkout uat
git pull

# rebase 变基 (基于 uat 整理好自己的新增修改)
git checkout develop-yue
git rebase uat

# 将变基好的新增内容合并到 uat
git checkout uat
git merge develop-yue

# 上传到远端
git push

rebase 解决冲突: rebase 的时候,解决冲突的后的提交不是使用 commit 命令,而是执行 rebase 命令,追加参数,-- continue 选项 (继续 rebase),--abort 选项 (结束 rebase)

hotfix 分支热更新

创建分支:

# 基于 uat 分支签出新的热更新分支
git checkout -b hotfix_xxxx uat

bug 修复完成后合并到 uat:

# 先切换 uat 拉取最新 code,因为 merge 的时候选取的是本地分支
git checkout uat
git pull

# rebase 变基 (基于 uat 整理好自己的新增修改)
git checkout hotfix_xxxx
git rebase uat

# 将变基好的新增内容合并到 uat
git checkout uat
git merge hotfix_xxxx

# 上传到远端
git push

bug 修复完成后合并到 prod: 参照下一项 【发布的流程】

发布的流程

1、合并 uat 分支到 prod

# 确保本地的 uat 分支已经是最新的
git checkout prod

# 合并 uat 的修改内容
git merge --no-ff uat (简单版本: git merge uat)

2、打 tag

# 打 tag
git tag v1.7.21 (打标签后提交会新建一个以 tag 名命名的分支)

# 提交指定 tag 分支到远端 :git push [remote] [tag]
git push origin v1.7.21

3、推送代码

# 提交 prod 分支到远端
git push

补打 tag :

# 新建一个 tag 在当前commit
git tag v1.7.21 ef9520a

# 提交指定 tag 分支到远端 :git push [remote] [tag]
git push origin v1.7.21

# 删除本地 tag
git tag -d [tag]

# 删除远程tag
git push origin :refs/tags/[tagName]
@yanyue404 yanyue404 changed the title 分支管理策略 Git 分支管理策略 Sep 4, 2020
@yanyue404 yanyue404 changed the title Git 分支管理策略 Git 自定义 merge 合并策略 Nov 13, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant