GIT分支管理

目的

GIT分支比较复杂,新手操作需要谨慎,如有误操作,容易造成代码混乱.此文档针对各种场景预案进行git操作指导,使新手更快掌握git

分支规范

长期分支
  • master 生产环境
  1. 负责记录生产环境版本的迭代,该分支代码与线上生产代码是完全一致的。
  2. 必须是 Protected, 仅限项目 Owner 提交或合并
  • sit sit环境
  1. 负责记录测试环境SIT版本的迭代,该分支代码与线上SIT代码是完全一致的。
  2. 必须是 Protected, 仅限项目 Owner或者朱程序员 提交或合并
  • dev 开发分支
  1. 该分支记录相对稳定的版本,所有的feature分支和bugfix分支都从该分支创建
  2. 可由开发负责提交合并
短期分支
  • release/{version} 发布分支
    1. 用于代码上线准备,该分支从dev分支创建
    2. 该分支的最新版本与开发环境保持一致
    3. 测试过程中发现bug需要开发人员在该release分支上进行bug修复,所有bug修复完后,在上线之前,需要合并该release分支到master分支和develop分支。
  • feature/JIRA_ID* 新需求分支
    1. 用于开发新的功能,新的需求,该分支从developer分支创建
    2. 不同的功能创建不同的功能分支,功能分支开发完成并自测通过之后,需要合并到 develop 分支,之后删除该分支。
  • bugfix/JIRA_ID* bug修复分支
    1. 用于修复不紧急的bug,从developer分支创建
    2. 普通bug均需要创建bugfix分支开发,开发完成自测没问题后合并到 develop 分支后,删除该分支。
  • hotfix/JIRA_ID* 紧急bug修复分支
    1. 该分支只有在紧急情况下使用,从master分支创建,用于紧急修复线上bug
    2. 修复完成后,需要合并该分支到master分支以便上线,同时需要再合并到develop分支。
本地分支
  • 本地分支
    1. 基于远程分支创建的本地分支需要与远程分支名相同
    2. (建议)基于本地分支创建的本地分支命名规范: 本人标示-远程分支名-功能说明
    3. 合并完毕需要删除本地分支

分支管理办法

  1. [强制] masterrelease分支只能由特定人进行合并和特殊场景下提交,其他人只能pull
  2. [建议] 能再当天解决掉的小问题,可直接在dev分支下修改,并提交到develop远程分支
  3. [强制] 不能当天解决的问题,或者重大改动,必须使用创建新的分支来解决
  4. [强制] 每次切换分支后,必须git pulll,更新代码
  5. [强制] git commit备注必须详细描述改动内容,每次提交文件数不超过5
  6. [强制] 所有冲突必须在本地解决
  7. [强制] 冲突解决有疑问,必须通知到冲突相关人员
  8. [推荐] 正常提交及合并流程为
Created with Raphaël 2.2.0 开发人员:切换至开发分支 开发人员:更新分支 开发人员:创建本地开发分支 开发人员:代码编写 开发人员:提交代码 开发人员:合并开发分支是否冲突 开发人员:解决冲突 开发人员:推送代码 是否新建远程分支 管理员:合并至dev分支代码 管理员:将dev分支合并至sit分支 管理员:将sit分支合并至master分支 打包编译部署 yes no yes no

应用场景

1. BUG
1.1 当天就能解决的本地分支bug
# 更新代码
git pull
################################
############ 修复bug ###########
################################
# 提交代码:根据情况决定用add+commit或者直接commit -a
git commit -a -m "备注说明"
# 推送代码
git push
1.2 无法当天解决的本地分支BUG
# 更新代码
git pull
# 查看本地分支状态
# 切换分支需保证原分支本地修改均已提交或者使用git stash存储修改
git status
# 基于本地分支创建新本地分支
git checkout -b new-branch
################################
############ 修复bug ###########
################################
# 提交代码:根据情况决定用add+commit或者直接commit -a
git commit -a -m "备注说明"
# 切换分支至原分支
git checkout orig-branch
# 合并分支
git merge new-branch
# 合并分支时如有冲突需解决
# 提交合并
git commit -a -m "备注"
# 删除原分支
git branch -D new-branch
1.3 解决紧急生产环境BUG
# 更新远程分支列表
git remote update origin --prune
# 存储当前分支修改,也可以直接提交
git stash
# 切换至master分支
git checkout master
# master分支更新代码
git pull
# 基于master分支创建本地分支
# 要求本地分支名命名规则:hotfix_#JIRA
git checkout -b hotfix_#JIRA
################################
############ 修复bug ###########
################################
# 提交代码:根据情况决定用add+commit或者直接commit -a
git commit -a -m "备注说明"
# 推送并创建远程分支
git push origin hotfix_#JIRA:hotfix_#JIRA
# 删除本地分支
git branch -D hotfix_#JIRA
# 切换原本地分支
git checkout orig-barnch
# 恢复修改记录
git stash list
git apply stash@{id}
# 登陆到gitlab服务器
# 发起合并请求至生产,等待管理员合并代码
# 发起合并请求至SIT环境,等待管理员合并代码
# 发起合并请求至dev环境,等待管理员合并代码
# 合并完成后,由管理员删除远程分支
1.4 解决测试/开发环境BU
# 更新远程分支列表
git remote update origin --prune
# 切换至sit分支
git checkout sit
# sit分支更新代码
git pull
# 基于sit分支创建本地分支
# 要求本地分支名命名规则:bugfix_#JIRA
git checkout -b bugfix_#JIRA
################################
############ 修复bug ###########
################################
# 提交代码:根据情况决定用add+commit或者直接commit -a
git commit -a -m "备注说明"
# 推送并创建远程分支
git push origin bugfix_#JIRA:bugfix_#JIRA
# 删除本地分支
git branch -D bugfix_#JIRA
# 登陆到gitlab服务器
# 发起合并请求至SIT环境,等待管理员合并代码
# 发起合并请求至dev环境,等待管理员合并代码
# 合并完成后,由管理员删除远程分支
2. 新功能开发
1.1 远端创建分支
# 更新远程分支列表
git remote update origin --prune
# 基于远程分支创建本地分支
# 要求本地分支名与远程分支名相同
git checkout -b 远程分支名 orgin/远程分支名
################################
############ 修复bug ###########
################################
# 提交代码:根据情况决定用add+commit或者直接commit -a
git commit -a -m "备注说明"
# 切换分支至原分支
git push
1.1 创建本地分支
# 切换至待开发的本地分支
git checkout local-branch
# 更新本地分支
git pull
# 要求本地分支名与远程分支名相同
git checkout -b new-local-branch
################################
############ 修复bug ###########
################################
# 提交代码:根据情况决定用add+commit或者直接commit -a
git commit -a -m "备注说明"
# 切换分支至原分支
git chekout local-branch
# 更新原分支
git pull
# 合并分支
git merge new-local-branch
# 解决冲突
# 提交代码:根据情况决定用add+commit或者直接commit -a
git commit -a -m "备注说明"
# 推送代码
git push
各种坑处理方式
push出在开发过程中需要更新代码,但更新出错,各种出错的统一解决办法
# 贮藏代码:记住stash id
git stash
# 理论上贮藏代码后,git status是clean的,但是偶尔会出现1-2个文件仍然需要 commit
# 可以将他们提交到本地,这个时候是会出错的,出错后不用管出错,git status就clean了
# 检查分支是否clean了
git status
# 更新代码
git pull
# 查看stash序号
git stash list
# 提取贮藏:
git stash apply stash@{序号}
# 在提取的时候可能会出现冲突,解决冲突即可

练习题

练习库: git@gitlab.code.linshimuye.com:root/gitlab-test.git

  1. 克隆项目
  2. 查看本地分支
  3. 查看提交日志
  4. 创建本地分支
  5. 本地分支与远程分支关联
  6. 创建与远程分支关联的本地分支,并切换分支
  7. 切换分支
  8. 存储当前修改记录并切换分支
  9. 切换分支并提取存储记录
  10. 更新代码
  11. 删除本地分支
  12. 提交代码:提交前请模拟冲突
  13. 推送代码
  14. 推送代码并创建远程分支
  15. 代码合并
# 克隆项目 
git clone git@gitlab.code.linshimuye.com:root/gitlab-test.git
# 查看本地分支
git branch -vva
# 查看提交日志 
git log
# 创建本地分支
git fetch origin 远程分支名x:本地分支名x
# 本地分支与远程分支关联 
git branch --set-upstream-to 远程分支名x 本地分支名x
# 创建与远程分支关联的本地分支,并切换分支 
git checkout -b 本地分支名x
# 切换分支 
git checkout 本地分支名x
# 存储当前修改记录并切换分支 
git status
git stash
# 切换分支并提取存储记录 
git checkout 本地分支名x
git stash list
git stash appply stash@{id}
# 更新代码 
git pull
git rebase
# 删除本地分支 
git branch -D 本地分支名x
# 提交代码 
git add 文件名
git commit -m "提交备注"
# 推送代码
git push
# 推送代码并创建远程分支
git push origin 远程分支名x:本地分支名
# 代码合并
git merge 待合并的分支名x

注意事项

切换分支之前必须提交代码或者贮藏代码

git原本设计切分支之前必须提交代码或者贮藏代码,但是实际操作过程中经常出现未提交或者贮藏就能切换分支,并且最新改动也带到了新分支中,容易造成代码混乱.所以

切换分支之前必须提交代码或者贮藏代码
切换分支之前必须提交代码或者贮藏代码
切换分支之前必须提交代码或者贮藏代码

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值