Pro Git:https://git-scm.com/book/en/v2
Git教程(廖雪峰):https://www.liaoxuefeng.com/wiki/896043488029600

说明

本章介绍企业开发中,版本控制工具git的常规应用方案。
《java web 项目发布到 git 仓库》 这篇博客中作者已经介绍了创建java web项目的git仓库的全部过程,我这里以码云作为git仓库进行演示(自己操作时用虚拟机中的gitlab仓库最佳)。

一. 分支规划

在软件产品的迭代开发过程中,我们经常遇到这样的业务场景:
我们的产品在生产发布完1.0版本,并且进行1.1版本开发过程中,发现1.0版本存在严重BUG,必须修复。而我们又不能够在1.1版本中修复并发版,因为1.1版本中有尚且不能发布到生产环境的功能

如何解决如上问题呢?

这里我们要用到git的分支管理功能,按照如下方案规划分支。

  • master : 生产分支,即该分支与当前生产代码版本一致。
  • develop : 开发分支,该分支为当前开发版本分支,每个里程碑结点都须先合并到master,再进行后续开发。
  • hotfix :补丁分支,该分支用于修复生产BUG,在修复问题前,从master分支派生而来,修复完成后,将该分支分别合并到 masterdevelop分支。
    分支规划图
  • 项目git仓库创建完成后,基于 master分支 创建 develop分支,项目团队的功能开发均在develop分支上进行;
  • 产品首次发布生产版本时,先将 develop分支 的代码合并到master分支,并从合并后的master分支打包项目部署生产。
  • 产品后续功能迭代开发继续在develop分支进行。
  • 当生产版本发现重大BUG需要紧急修复时,基于当前master分支创建hotfix分支,并在hotfix分支上修复该BUG。
  • hotfix分支上完成BUG修复后,将该分支代码分别合并到master分支develop分支
  • 合并完成后,master分支代码打包发布生产修复BUG;develop分支继续后续功能开发。

注意:每次生产发布关键版本,建议对该版本打tag,以便代码控制和版本对比。

二. tysite-service 分支规划操作
1、查看本地分支和远程分支
git branch -a

分支信息
说明:

  • remotes/开头的分支为远程分支;其他分支为本地分支。如remotes/origin/master 表示远端origin下的master分支。
  • * 开头表示该分支为本地目录当前分支。
2、创建develop分支
  • 创建develop分支(创建后会自动切换到develop分支)
git checkout -b develop
  • 合并master分支代码到develop分支
git merge --no-ff -m 'Create a develop branch' master

建议:合并分支时使用强制禁用Fast forward模式,以便保留操作日志。

  • 推送本地分支到远端git仓库
git push origin develop

创建新分支并推送至码云

三. git常用操作
1、项目拉取
  • 克隆项目
git clone https://gitee.com/tysite-web/tysite-service.git
  • 进入项目工作区并切换到develop分支
cd tysite-service
git checkout develop
  • 拉取最新代码
git pull
2、编辑文件并提交
  • 编辑文件(仅以vi做示例)
vi demo.txt
  • 添加到暂存区(缓存区)
git add .

说明:. 表示所有未添加到缓存区的文件变更。

  • 提交到本地仓库
git commit -m '提交到本地仓库'
  • 推送到远程仓库指定分支(develop)
git push origin develop

注意-f 参数可以强制推送本地版本到非保护状态的远程仓库

3、文件提交状态检查
  • 查看工作区、暂存区文件提交情况
git status

工作区和暂存区中未提交的文件修改,如下图所示:
git status

  • 查看提交日志
// 查看当前分支所有提交日志
git log
//简化显示当前分支提交日志
git log --graph --pretty=oneline --abbrev-commit

版本查看

  • 查看未推送到远程仓库的本地提交日志
git cherry -v

查看推送到远程仓库的本地提交

  • 查看提交的文件列表
git log --stat 0249448

说明:0249448git log 的短ID,根据实际情况调整
查看提交的文件列表

4、版本回退
  • 从索引(暂存区)中删除文件,同时删除工作区文件
git rm -f <file name>
  • 从索引(暂存区)中删除文件,保留工作区文件
git rm --cached -f <file name>

删除索引,保留文件

  • 回退文件到本地仓库的指定版本
git checkout HEAD <file name>

HEAD表示本地仓库的版本ID
还原本地仓库版本

  • 回退到远程仓库的最新版本,不保留版本差异
git reset HEAD^

HEAD^ 指远程仓库的最新版本,也可用日志ID回退到指定版本
已提交版本回退演示

  • 回退到远程仓库的最新版本,保留版本差异 (--mixed)
git reset --mixed HEAD^
  • 回退到某个已经提交到远程仓库的版本
git reset --hard <版本号>
  • 然后通过强制提交命令,提交版本
git push -f origin develop
5、实现本地与远端分支一致
git remote update origin --prune
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐