刚入职实习,在mentor的安排下走完了git的全流程,感觉还是比较复杂的,所以写了这个文章,自己梳理了一下,主要是开发新功能的git流程以及 rebase和cherry-pick的使用。
Mac推荐安装oh-my-zsh,会使终端使用体验更愉快。
一、git flow 标准简单介绍
master分支:保存项目的最新进度 进行分支保护
product分支:最新的可以部署上线的版本 进行分支保护
feature分支:进行新功能的开发等,父分支选product
commit规范(参考):
| feat | fix | docs | style | refactor |
|---|---|---|---|---|
| 新功能 | 修复bug | 文档改变 | 代码格式改变 | 已有功能重构 |
| perf | test | build | revert | chore |
|---|---|---|---|---|
| 性能优化 | 增加测试 | 改变了build工具 | 撤销上一次的 commit | 构建过程变动 |
type:用于说明 commit 的类别,只允许使用上面10个标识。
二、对大型项目进行功能添加或重构
第一步:把product分支的项目clone到本地。并在remote中添加线上仓库 。
git clone 【仓库地址】
git pull 【仓库地址】
git remote add origin 【仓库地址】//与远端仓库链接
第二步:基于product分支创建新的分支feature/xxx并切换至此分支。(xxx为新添加的需求)
git checkout -b feature/xxx
git push --set-upstream origin feature/xxx //在远程服务器也创建一个对应的分支
第三步:在此分支基础上添加修改或新增功能代码。开发完成后,提交feature代码到远程相应分支。
git add . //将所有修改添加至工作区
git commit -m [提交说明需符合规范]
git push <远程主机名> <本地分支名>:<远程分支名>
git push origin feature/xxx
第四步:合并到master分支进行测试
1、rebase方法
在feature/xxx基础上切出一个用于合并master的测试分支release/xxx。将release分支本地rebase master分支。
git checkout -b release/XXX //在feature/xxx基础上
git checkout master
git pull //需要保证pull的是最新版本的master
git checkout release/xxx
git rebase master //对冲突进行选择保留及修改
git rebase --continue //直到显示变基成功
git push (--set-upstream origin feature/XXX) //push到远程仓库
rebase解决冲突流程及办法
- 当我们rebase master时,会遇到很多冲突,当我们解决完冲突后,使用命令git rebase --continue来继续
- 当rebase时的冲突比较多,并且都是使用current代码时,可以使用命令git rebase -s recursive -X ours master来快速rebase
2、cherry-pick方法
在master基础上切出一个用于合并master的测试分支release/xxx,将release分支本地 cherry-pick最新提交的号码。
git checkout master
git checkout -b release/xxx
git cherry-pick 'commit号'
git cherry-pick --continue
git add.
git commit -m '提交信息'
git push --set-upstream origin release/xxx //推送到远程
此时,release/xxx是基于master添加上所开发最新功能的版本,
第五步:最后release分支通过MR方式合入master分支,审核通过后删除原分支。
最后release分支通过MR方式合入master分支,审核通过后删除原分支。
三、流程图
四、git常用命令
git init - 初始化仓库。
git add . - 添加文件到暂存区。
git commit - 将暂存区内容添加到仓库中。
git clone - 拷贝一个 Git 仓库到本地,能够查看该项目,或者进行修改。
git remote - 用于在远程仓库的操作。
git remote add [shortname] [url] //添加远程库
git remote -v //显示所有远程库
git remote rm name //删除远程仓库
git status - 用于查看在你上次提交之后是否有对文件进行再次修改。
git reset - 用于回退版本,可以指定退回某一次提交的版本。
git reset [--soft | --mixed | --hard] [HEAD]
git reset HEAD^ 回退所有内容到上一个版本
git reset HEAD^ hello.php 回退 hello.php 文件的版本到上一个版本
git reset 052e 回退到指定版本
git reset –hard HEAD~3 # 回退上上上一个版本
git reset –hard bae128 # 回退到某个版本回退点之前的所有信息。
git reset --hard origin/master # 将本地的状态回退到和远程的一样
git rm - 用于删除文件。
git rm <file> 文件从暂存区和工作区中删除
git rm --cached <file> 文件从暂存区域移除,但仍保留在当前工作目录中
git fetch - 用于从远程获取代码库。
git pull - 用于从远程获取代码并合并本地的版本。
注:git fetch与git pull区别:
git fetch是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机 分支中。而git pull 则是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决。
git push - 用于从将本地的分支版本上传到远程并合并。
git branch - 查看本地所有分支
git branch -a - 查看所有分支,包括本地分支和远程分支
git branch -d 【本地分支名】- 删除本地分支
git push origin --delete 【远程分支名】- 删除远程分支
git log --oneline - 查看本地分支提交日记
补充方法:
本地分支和远程分支回滚到某一版本
git reset 【commit号】 //本地回滚
git push -f origin 【分支名】 //强制远程回滚