文章目录
目的
GIT分支比较复杂,新手操作需要谨慎,如有误操作,容易造成代码混乱.此文档针对各种场景预案进行git操作指导,使新手更快掌握git
分支规范
长期分支
- master
生产环境
- 负责记录
生产环境版本
的迭代,该分支代码与线上生产代码是完全一致的。 - 必须是 Protected, 仅限项目 Owner 提交或合并
- sit
sit环境
- 负责记录
测试环境SIT
版本的迭代,该分支代码与线上SIT代码是完全一致的。 - 必须是 Protected, 仅限项目 Owner或者朱程序员 提交或合并
- dev
开发分支
- 该分支记录相对稳定的版本,所有的feature分支和bugfix分支都从该分支创建
- 可由开发负责提交合并
短期分支
- release/{version}
发布分支
- 用于代码上线准备,该分支从
dev分支
创建 - 该分支的最新版本与开发环境保持一致
- 测试过程中发现bug需要开发人员在该release分支上进行bug修复,所有bug修复完后,在上线之前,需要合并该release分支到master分支和develop分支。
- 用于代码上线准备,该分支从
- feature/JIRA_ID*
新需求分支
- 用于开发新的功能,新的需求,该分支从developer分支创建
- 不同的功能创建不同的功能分支,功能分支开发完成并自测通过之后,需要合并到 develop 分支,之后删除该分支。
- bugfix/JIRA_ID*
bug修复分支
- 用于修复不紧急的bug,从developer分支创建
- 普通bug均需要创建bugfix分支开发,开发完成自测没问题后合并到 develop 分支后,删除该分支。
- hotfix/JIRA_ID*
紧急bug修复分支
- 该分支只有在紧急情况下使用,从master分支创建,用于紧急修复线上bug
- 修复完成后,需要合并该分支到master分支以便上线,同时需要再合并到develop分支。
本地分支
- 本地分支
- 基于远程分支创建的本地分支需要与远程分支名相同
- (建议)基于本地分支创建的本地分支命名规范: 本人标示-远程分支名-功能说明
- 合并完毕需要删除本地分支
分支管理办法
[强制]
master
和release
分支只能由特定人进行合并和特殊场景下提交,其他人只能pull[建议]
能再当天解决掉的小问题,可直接在dev
分支下修改,并提交到develop
远程分支[强制]
不能当天解决的问题,或者重大改动,必须
使用创建新的分支
来解决[强制]
每次切换分支后,必须
先git pulll
,更新代码[强制]
git commit
备注必须详细描述改动内容,每次提交文件数不超过5
个[强制]
所有冲突必须
在本地解决[强制]
冲突解决有疑问,必须通知到冲突相关人员[推荐]
正常提交及合并流程为
应用场景
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
- 克隆项目
- 查看本地分支
- 查看提交日志
- 创建本地分支
- 本地分支与远程分支关联
- 创建与远程分支关联的本地分支,并切换分支
- 切换分支
- 存储当前修改记录并切换分支
- 切换分支并提取存储记录
- 更新代码
- 删除本地分支
- 提交代码:提交前请模拟冲突
- 推送代码
- 推送代码并创建远程分支
- 代码合并
# 克隆项目
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原本设计切分支之前必须提交代码或者贮藏代码,但是实际操作过程中经常出现未提交或者贮藏就能切换分支,并且最新改动也带到了新分支中,容易造成代码混乱.所以
切换分支之前必须提交代码或者贮藏代码
切换分支之前必须提交代码或者贮藏代码
切换分支之前必须提交代码或者贮藏代码