创建与合并分支
-
git branch 分支007
-----创建分支007 -
git checkout 分支007
-----切换到分支007 -
git checkout -b 分支007
-----创建并切换到分支007 -
git branch
-----查看当前分支 -
git merge 分支007
-----合并分支007到当前分支 -
git branch -d 分支007
-----删除分支007
常用分支使用流程:(例子为dev分支)
//创建名为dev分支
$ git branch dev
//切换到dev分支
$ git checkout dev
//查看当前分支
$ git branch
//修改文件后提交到dev分支
$ git add readme.txt
$ git commit -m "branch test"
//dev分支的工作完成后,切换回master分支
$ git checkout master
//此时在master分支上看不到修改,因为修改只是被提交到了dev分支,我们可以将dev分支的工作成果合并到master分支上
$ git merge dev
//合并成功后,就可以删除dev分支了
$ git branch -d dev
//查看当前分支
$ git branch
解决冲突
-
主分支修改同一文件时
- 创建并切换feature1分支
$ git checkout -b feature1
- 修改readme.txt后添加、提交
$ git add readme.txt
$ git commit -m "modification in feature1"
- 切换到master分支
$ git checkout master
- 修改readme.txt后添加、提交
$ git add readme.txt
$ git commit -m "modification in master"
- 合并feature1到master
$ git merge feature1
- 此时会有冲突,我们需要再次对文件的做出最后的修改,再添加提交
$ git add readme.txt
$ git commit -m "conflict fixed"
- 我们使用到参数的
git log
查看分支合并的情况
$ git log --graph --pretty=oneline --abbrev-commit
- 分支的任务完成后,记得删除分支
$ git branch -d feature1
- 创建并切换feature1分支
我们使用
git merge dev
时默认使用快速合并-
我们还可以使用:
$ git merge --no-ff -m "merge with no-ff" dev
- 这样我们就可以为此次的合并添加一个commit描述了
- 再使用
$ git log --graph --pretty=oneline --abbrev-commit
查看分支合并的情况
分支策略
master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
bug分支
- 出现了bug,需要再master上修改!
- 但是我工作的dev分支还没有完工!
- 此时我们需要,在dev上
$ git stash
,把当前工作现场“储藏”起来 - 然后从master新建一个bug分支来修复bug
- 修复完成后,合并到master并删除bug分支
- 再回到我们的dev分支,
$ git stash list
查看我们储存的现场,再恢复现场git stash pop
- 恢复现场有两个方法:
方法一:
一是用 git stash apply 恢复
但是恢复后,stash内容并不删除,你需要用 git stash drop 来删除
方法二:
用 git stash pop 恢复的同时把stash内容也删了
- 多次stash时,恢复的时候
git stash list //查看所有储存的现场
$ git stash apply stash@{0} //恢复指定的stash
feature分支
- 创建——切换——完成——回到主分支——合并——删除分支
- 当一个feature分支被创建后,没有被合并就需要删除时,要使用如下命令删除
$ git branch -D 分支名
多人协作
- 指定要推送的分支
-
git remote -v
-----查看远程库信息,可以看到能够抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。 - 推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:
$ git push origin master
- 如果要推送其他分支,比如dev,就改成:
$ git push origin dev
-
- 抓取分支
- 多人协作时,大家都会往master和dev分支上推送各自的修改
$ git clone 项目地址
- 当你的组员从远程库clone时,默认情况下,只能看到本地的master分支
- 现在,他要在dev分支上开发,就必须创建远程origin的dev分支到本地
$ git checkout -b dev origin/dev
- 现在,他就可以在dev上继续修改,然后,时不时地把dev分支push到远程
$ git push origin dev
- 你们两人对同样的文件作了修改,并试图推送时,会出错
- 这时先用
git pull
把最新的提交从origin/dev抓下来 - git pull也失败了,因没有指定本地dev分支与远程origin/dev分支的链接
- 设置链接:
git branch --set-upstream branch-name origin/branch-name
,再pull , 此时有冲突需先解决 , 再用git push origin branch-name
推送就能成功
- 多人协作时,大家都会往master和dev分支上推送各自的修改