建立dev分支
在当前分支下新建一个dev
分支然后切换到该分支
git branch dev
git checkout dev
# 相当于 git checkout -b dev
git branch -a
查看分支,当前分支前会有*
标识
git add .
git commit -m "some changes in dev"
修改工作区文件,并在dev
分支上进行一次提交
git branch -d branchname
删除本地分支
合并分支
快速合并
切回master
分支,合并dev
到当前分支,然后删除dev
分支
git checkout master
git merge dev
git branch -d dev
这次合并是 Fast-forward 快速模式,直接将 master 指向 dev 的当前分支
解决冲突
若在dev
分支中修改的文件,在master
分支中也被修改了,此时合并则会提示冲突
Auto-merging readme.txt
CONFLICT (add/add): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.
需要根据提示手动解决冲突,然后再提交
git add readme.txt
git commit -m "fix conflict"
git status
可以输出有冲突的文件
git使用<<<<<<<,=======,>>>>>>>标记不同分支的内容
git log --graph --pretty=oneline --abbrev-commit
查看合并情况
git log --graph
查看分支合并图
分支管理策略
Fast-forward 快速合并模式,删除分支后,会丢掉分支信息,若要强制禁用 Fast-forward 模式,git会在merge时生成一个新的commit,此时,从分支历史可查看分支信息
git merge --no-ff -m "merge with no-ff" dev
--no-ff
表示禁用Fast-forward
,本次合并master
需要进行一次commit
,所以使用-m
添加描述
git log --graph --pretty=oneline --abbrev-commit
查看分支历史
分支策略:首先,master
分支应是稳定的,仅用来发布新版本,都在dev
分支上进行开发,dev
是不稳定的,每个开发人员都有自己的分支,可经常与dev
分支进行合并,但只在发布新版本时与master
分支合并
bug分支
开发过程中,若突然接到一个代号3的bug需要紧急修复,但是当前正在dev
上的开发还未完成,但是bug又很紧急,这时候应该先将工作区内容保存,并切换到相应分支,并新建一个临时分支修复bug
git stash
将当前工作空间保存,等以后恢复后继续工作
如需要在master
分支上修复bug,在该分支上创建临时分支
git checkout master
git branch -b issue3
完成修复后,合并issue3
到master
分支并删除issue3
分支,再切回到dev
分支继续开发
git checkout master
git merge issue3
git branch -d issue3
git checkout dev
git status
此时,git status
查看发现工作区是干净的,未被修改过
git stash list
查看stash中内容,发现里面有原工作区内容
从stash
中恢复
git stash apply
恢复保存的内容,但stash中内容不被删除,可用git stash drop
主动删除
git stash pop
将stash
中内容出栈,stash中内容会被删除
可以多次git stash
,恢复的时候使用git stash list
查看,再指定恢复的内容
git stash apply stash@{0}
feature分支
开发过程中,在添加新功能时,肯定不希望一些实验性的代码将主分支搞乱,所以每添加一个新功能时最好新建一个feature分支,开发完成后,合并并删除
此时,接到一个新任务,任务代号caribbean,功能计划占领加勒比,跟随杰克船长
git checkout -b feature-caribbean
开发完成后,提交,合并再删除
就在此时,接到命令,杰克船长不再出现在加勒比了,任务终止
需要删除该分支git branch -d feature-caribbean
git会提示该分支还未被合并,若删除会丢掉修改,若要强行删除,需使用-D
参数即可