git

http://wangyaqi.cn/2015/05/18/git/

 

  • 原则:新分支只能合并到来源分支(不能在新分支之间做合并),来源分支可以将部分改进合并到新分支
  • 资料:分支模型英文原版
分支类型名称永久命名规范来源操作合并到角色
master主干,正式环境Ymasterrelease,hotfix发布人员
develop开发分支,开发环境,测试环境Ydev任意开发人员
feature功能分支NV2.3_ft_pay_lyx。V版本号__ft_功能说明_负责人dev任意dev开发人员
release版本发布分支NV2.3_rl_20161111。V版本号__rl_版本日期devbugfixdev发布人员,开发人员
hotfix补丁分支NV2.2_hf_123456-332452_wyq。V版本号__hf_bug说明_负责人masterbugfixdev发布人员,开发人员

精简模型的操作:

  1. hotfix无需另开分支,直接在master开发【否则还需部署一套环境】。合并操作同hotfix。
  2. 当前版本的feature无需另开分支,直接在dev开发。长期feature需开分支。

环境清单

  1. 每个环境都有一套:执行程序,数据库,配置
环境对应分支执行程序数据库设置说明
开发环境dev+feature开发人员自行搭建,独立可复用测试数据库可复用测试配置 
测试环境dev独立独立独立 
发布环境release或者hotfix独立可复用测试数据库独立 
正式环境master独立独立独立 

使用

日常流程

初始化

  1. 从master克隆dev:git checkout master; git branch dev;

开发feature分支

  1. 从dev克隆feature:git checkout dev; git branch V2.3_ft_pay_lyx;
  2. 开发人员检出:git checkout V2.3_ft_pay_lyx;
  3. feature合并回dev:git checkout dev; git merge V2.3_ft_pay_lyx;

开发release分支

  1. 从dev克隆release:git checkout dev; git branch V2.3_rl_20161111;
  2. 开发人员检出:git checkout V2.3_rl_20161111;
  3. release合并回dev:
  4. release合并到master(是一个发布版本。同时需要打标签):

开发hotfix分支

  1. 从master克隆hotfix:git checkout master; git branch V2.2_hf_123456-332452_wyq;
  2. 开发人员检出:git checkout V2.2_hf_123456-332452_wyq;
  3. hotfix合并回master:
  4. hotfix合并到dev/release:

hotfix时,当有一个release分支同时存在(当前版本快发布了,却发现上个版本的bug)。这个hotfix分支必须被合并到release分支而不是dev分支(release后续会合并到dev)。

部署环境

  1. 获取代码(测试环境):git -C DIR checkout dev; git -C DIR pull;
  2. 部署

常用操作

选择提交的分支

按照以下顺序选择:

  1. release分支:bugfix(无bugfix分支的情况下),需尽快发布的小改动和功能
  2. dev分支:
    • 下个版本 && 小改动
    • 下个版本 && (新增功能 && 不修改原有逻辑)
  3. feature分支:到了测试和发布阶段再合并回dev分支
    • !下个版本
    • 下个版本 && 调整功能
    • 下个版本 && (新增功能 && 修改原有逻辑)

暂存文件

  • 工作区代码暂存,会记录来源分支
  • 使用场景:有新工作要做(如bugfix)+ 当前工作区有不少修改了却无法提交的文件
  • 暂存当前工作区,切换到新工作,恢复当前工作区

打补丁

  • 跨分支代码迁移
  • 使用场景:提交了代码到主分支+该功能代码需要先发布上线
  • 在主分支上选择该功能对应的所有提交,创建成一个补丁,在发布分支上应用本补丁

取消本地没push的commit

  1. 重置到commit前的上一个版本,常用mixed
    • soft:提交内容放在缓冲区(相当于git add了)
    • mixed:提交内容不放在缓冲区(相当于改动后什么都没操作,git add后等于soft)
    • hard:丢弃提交内容

pull时冲突处理

无commit(2种方法,推荐暂存)

暂存处理

  1. stash暂存改动
  2. pull最新的版本
  3. stash pop,手动解决冲突

冲突处理

  1. commit
  2. “有commit”的流程

有commit

  1. pull,手工解决冲突
  2. commit(解决冲突)merge版本
  3. push

冲突各方说明

方式我的(LOCAL)他人(REMOTE)
暂存本地文件暂存
分支合并目标分支(LOCAL)源分支(REMOTE, 被合并的)
补丁本地文件补丁

代码合并

仓库迁移

  • https://www.jianshu.com/p/39d2263c69b1

重置目录

  • git -C src fetch && git -C src reset –hard && git -C src checkout B1 && git -C src pull
  • src是git目录路径,B1是分支或者标签。如是标签pull会失败,可忽略

信息获取

  • git -C $3 symbolic-ref –short -q HEAD // 分支
  • git -C $3 describe –always –tag // 标签
  • git -C $3 rev-parse –short HEAD // 提交

变基(rebase)

  • merge和rebase这两种整合方法的最终结果没有任何区别,但是变基使得提交历史更加整洁。 你在查看一个经过变基的分支的历史记录时会发现,尽管实际的开发工作是并行的,但它们看上去就像是串行的一样,提交历史是一条直线没有分叉。
  • 目的是为了确保在向远程分支推送时能保持提交历史的整洁。例如向某个其他人维护的项目贡献代码时。在这种情况下,你首先在自己的分支里进行开发,当开发完成时你需要先将你的代码变基到 origin/master 上,然后再向主项目提交修改。 这样的话,该项目的维护者就不再需要进行整合工作,只需要快进合并便可。
  • https://xiaozhuanlan.com/topic/6873210549
  • https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%8F%98%E5%9F%BA

命令脚本

branch

  1. 显示当前分支:git branch
  2. 显示所有分支:git branch -va
  3. 显示分支的提交记录:git show-branch
  4. 显示当前分支的版本号(commit id):git rev-parse HEAD
  5. 切换分支/标签
  6. 切换本地分支:git checkout 分支/tag/commit,git checkout branch1, git checkout tag1, git checkout commit1
  7. 下载远程分支并切换:git checkout -b <本地分支> origin/<远程分支>,git checkout -b lb origin/rb
  8. 下载远程标签并切换:git checkout -b <本地分支> origin/tag1
  9. 基于当前分支创建新分支:git branch <本地新分支>
  10. 删除分支:git branch -d <远程分支>

其他

  1. **指定在特定目录执行git:git -C <目录> 执行命令**
  2. 拉取当前分支:git pull
  3. 拉取分支:git pull <远程主机> <远程分支>:<本地分支>,git pull origin master:master
  4. 合并分支(远程分支合并到当前分支):git merge <远程分支>
  5. 清除当前目录所有commit冲突的文件,不会回退:git reset hard
  6. 清除当前目录下所有没commit的管理文件的修改:git checkout .
  7. 清除当前目录下所有非管理文件:git -C . clean -xdf
  8. 永久删除远程分支上的提交。非常规操作,不建议使用
      cd <目录>
      git reset --hard HEAD^ // 删除最近的一次提交,删除n次提交就执行n次
      git push origin master -f // 提交到远程, origin是远程名称,master是分支名称
    

资料

  1. Learn Git Branching,很好的示范
  2. git push & git pull 推送/拉取分支
  3. Git - 分支的新建与合并
  4. SourceTree使用流程和方法
  5. git – 简易指南
  6. 强制删除远程分支上的某次提交
  7. Git下的冲突解决
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值