Git开发流程返回列表
上传时间:2018-09-20 内容关键字:Git,Git开发流程,Git开发
1、分支策略相关
- online分支对应线上
- sim分支对应web6
- test分支对应test1
- master分支作为online的备份
- feature/xxx 作为功能子分支
建议个人新建分支起名以feature/jira 为准,如无jira,可以以名字feature/hepeng为主。 获取最新数据是从master分支获取。
2、新建分支
新建分支不建议本地分支直接push到远程。建议如下操作:
先在公司gitlab上基于 online 分支创建新分支 feature/XXX (一定要从online新建,XXX一般用JIRA号)
然后在本地项目中拉取并创建远程分支:
git fetch origin +feature/XXX:feature/XXX
切换到新分支:
git checkout feature/XXX
3、在pull的时候出错
看提示有本地修改未提交的东西,提示你可能会覆盖(override)
这时候你可以根据情况:
- 选择git add + commit,把你修改的代码保存了;
- 选择git checkout file 还原文件修改。
4、pull或merge时候文件冲突
使用git status提示 both modified的文件列表就是冲突的文件,vi进入冲突文件修改包含“<<<” “>>>”的地方解决冲突,
最后把冲突文件git add 然后再git commit
git不能删除文件重新pull,区别于svn
5、上test步骤
上test,就是把自己的分支合并到远程test分支。建议操作如下
首先add/commit你的所有修改数据,并push到自己的分支上,如feature/hepeng
然后在gitlab上发起一个merge request,把feature/hepeng merge到test (建议有这个记录)
然后在本地代码切换到test分支 git checkout test
更新test的数据为最新(注意更新时候会不会报错或有冲突,先解决) git pull origin test
下载自己的最新数据到本地远程 git fetch origin feature/hepeng
合并数据 git merge FETCH_HEAD
把所有数据push到test git push origin test
Done!
上web6和上线请到gitlab操作 在gitlab中 new merge request from feature/XXX to sim/online 授权人写:张少飞,然后等待操作接口。
6、push分支有问题
(1)push分支在fast下必须是和你当前分支对应的分支
如你当前本地分支是test,push远程也只能push到test
(2)push时候不成,因为你版本不是最新,需要先pull或fetch+merge。
(3)push不成功可能是你没权限
7、代码暂存和取出
情况1:你在一个分支上做了一些修改,突然发现你所在的分支是test分支,你应该在feature/XXX分支操作
情况2:你正在做修改,突然有个紧急bug要fix,你不想commit再切换分支
这个时候你可以先把修改放入暂存区,然后do some job,或者切换到其他分支,最后取出你的修改到当前分支,操作如下:
git stash 存入暂存区
(do some job or git checkout feature/XXX 。。。)
git stash pop 取出
你也可以存入多个暂存区,通过git stash list 查看,通过git stash apply stash@{1}指定还原。
8、git fetch,pull
git pull == git fetch + git merge
git fetch 就是把线上分支拉取到本地远程,具体有几种写法
git fetch origin 把所有的origin远程分支都拉取到本地远程,并且名字一一对应。
git fetch origin feature/xxx 把feature/xxx分支拉取到本地远程,并且FETCH_HEAD指向它
git fetch origin feature/xxx:yyy 把feature/xxx分支拉取到本地远程,命名为yyy
git branch -av 查看所有的本地分支和本地远程的分支,根据情况进行合并
9、常用的命令讲解
- git add xx 添加文件
- git rm xx 删除文件。 替代物理删除文件,然后提交
- git add path --all 针对物理删除后的添加
- git commit -m 'xx' 备注是必须的。提交时会提交所有add,rm的数据。
- git status查看你将会提交的Changes to be committed,未提交的,以及未被tracked的
- git reset HEAD xx 如果某个文件被add了,但是不想提交可以恢复
- git fetch origin 拉取线上所有分支
- git fetch origin xxx:yyy 拉取线上某个分支
- git merge xx合并本地分支
- git merge origin/xx 合并某个fetch的分支
- git pull origin xxx 拉取分支并合并
- git checkout xx 切换到某个分支
- git checkout -b xx 新建某个分支并切换过去
- git branch -av 查看所有本地分支+远程分支及对应版本号
- git diff xxx 查看文件改动
- git log xxx 查看文件变动日志
- git branch -D xxx 删除本地分支
10、多人协助操作步骤
- 10.1根据jira任务,在gitlab上基于master创建新的分支:如开发新建分支为feature/JZ-test
- 10.2根据远程分支创建本地远程跟踪分支:git fetch origin feature/JZ-test
- 10.3相关开发开发人员基于gitlab上新建的分支创建本地分支:如git branch feature/JZ-test origin/feature/JZ-test
- 10.4切换到新建的本地分支:git checkout feature/JZ-test
- 10.5开发人员每天开发之前,执行git branch 或 git status,确认当前分支为自己所要开发的分支
- 10.6从远程分支拉取代码到本地远程分支:git fetch origin feature/JZ-test
- 10.7.讲本地远程分支合并到本地分支:git merge FEATCH_HEAD
- 10.8更新online本地远程分支:git fetch origin online
- 10.9将online分支合并到本地分支:git merge FEATCH_HEAD
- 10.10将更新后的代码推到远程分支:git push origin feature/JZ-test
11、代码回滚
it代码库回滚: 指的是将代码库某分支退回到以前的某个commit id
【本地代码库回滚】:
git reset --hard commit-id :回滚到commit-id,讲commit-id之后提交的commit都去除
git reset --hard HEAD~3:将最近3次的提交回滚
【远程代码库回滚】:
这个是重点要说的内容,过程比本地回滚要复杂
应用场景:自动部署系统发布后发现问题,需要回滚到某一个commit,再重新发布
原理:先将本地分支退回到某个commit,删除远程分支,再重新push本地分支
操作步骤:
11.1、git checkout the_branch
11.2、git pull
11.3、git branch the_branch_backup //备份一下这个分支当前的情况
11.4、git reset --hard the_commit_id //把the_branch本地回滚到the_commit_id
11.5、git push origin :the_branch //删除远程 the_branch
11.6、git push origin the_branch //用回滚后的本地分支重新建立远程分支
11.7、git push origin :the_branch_backup //如果前面都成功了,删除这个备份分支