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
分支派生而来,修复完成后,将该分支分别合并到master
和develop
分支。
- 项目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 log
//简化显示当前分支提交日志
git log --graph --pretty=oneline --abbrev-commit
- 查看未推送到远程仓库的本地提交日志
git cherry -v
- 查看提交的文件列表
git log --stat 0249448
说明:0249448
为 git 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