廖雪峰的Git使用教程
5 分支管理
https://www.liaoxuefeng.com/wiki/896043488029600/896954848507552
5.1 创建与合并分支
创建分支:git branch (分支名)
切换分支:git checkout (分支名)
或者git switch (分支名)
创建分支并切换到这个分支:git checkout -b (分支名)
或者git switch -c (分支名)
合并分支:首先要切换回master分支,然后使用git merge dev
,就可以将dev融合到master分支里。
删除分支:git branch -d (分支名)
5.2 解决冲突
https://www.liaoxuefeng.com/wiki/896043488029600/900004111093344
比方说,我在dev分支里修改了readme.txt,然后又在master分支里修改了readme.txt。分别git add和commit在各自的分支里之后,尝试融合,就会出现如下的场景。终端里显示的内容是下面这个。
而在原文里,会显示这样的场景。
解决冲突的办法是单机上面第4行和第5行之间的选项。然后尝试git add和commit提交。
在合并操作进行之后,就会有上面的结构图。我们可以使用下面的命令来看看命令历史和结构图。
#这一行是用来查看命令的历史。
git log
#这一行是用图表的方式来展示分支。
git log --graph
#如果你想省略掉无关的注释可以采用这一行命令
git log --graph --pretty=oneline --abbrev-commit
效果如图所示
5.3 分支管理策略
https://www.liaoxuefeng.com/wiki/896043488029600/900005860592480
合并分支有两种方式,第一种是fast forward模式,第二种是禁用fast forward模式。前者是默认的merge模式。
-
fast-forward模式
从图中可以看出,只要dev分支被删除,这个里面就只有一条线路,没有dev这个分支了。这样的合并只是单纯把master的指针指向了dev这一块。 -
禁用fast-forward模式
从图中,可以看出,dev分支并没有被抹去,与master二者合并提交,创建出了一个新的commit。
命令如下:
git merge --no-ff -m "merge with no-ff" dev
其中-m是因为要创建一个新的提交,所以要写一个提交注释。
5.4 Bug分支
https://www.liaoxuefeng.com/wiki/896043488029600/900388704535136
本节所讨论的技术适用于这样的场景,master分支上存在一个bug(同时也存在于dev分支上),我们正在dev分支上进行编辑,但是现在我们必须先修复bug,再编辑dev分支的任务,这之后再把dev分支上的bug(与master分支相同)修复。
第一步:你正在dev分支上进行编辑,然后master分支上有一个紧急需要你修复的bug。通过下面的命令来隐藏当前的状态。
#用于将当前的状态进行隐藏
git stash
第二步:在master上创建新的分支bug-1修复bug,通过add、commit完成提交,并merge到master分支上。
第三步:修复bug完毕,要回到dev分支上继续干活了。首先要查看之前存储的空间。
#用于查看之前存储的工作现场
git stash list
通常,系统会显示出如下场景:
$ git stash list
stash@{0}: WIP on dev: f52c633 add merge
第四步:恢复现场的两种方式。第一种是使用git stash apply
,不过这种方式不会删除之前存储的dev分支工作现场,需要使用命令git stash drop
手动删除;第二种是使用git stash pop
。
#这是第一种恢复现场的方法
git stash apply stash@{0}
#这是第二种恢复现场的方法
git stash pop
第五步:您现在已经修复了master分支上的bug,同时也继续回到了dev分支上进行编辑,但是dev分支上同样也是有问题的,因为本身dev分支就是从master分支上复制出来的,所以dev分支上的bug同样也需要修复。
我们发现,此前为了修复master分支,曾经创建了一个名为bug-1的分支,当时commit命令的命令号是可以查看的。
我们要切换回dev分支,然后我们通过下面的命令,就可以在dev分支上修复bug。
#在dev分支上修复bug
git cherry-pick (命令号)
5.5 丢弃未被合并的分支
https://www.liaoxuefeng.com/wiki/896043488029600/900394246995648
一个未被合并的分支,如果简单地使用git branch -d (分支名)
,并不能删除掉这个分支,如果想要强行删除未被合并的分支,必须使用下面的命令。
#删除未被合并的分支
git branch -D (分支名)
5.6 多人协作
https://www.liaoxuefeng.com/wiki/896043488029600/900375748016320
- 查看远程库的信息
要想查看远程库的信息,需要使用下面的命令。
#这是查看远程库的命令
git remote
如果想要查看详细的信息,就要使用下面的命令。
#详细地查看远程库的命令
git remote -v
- 推送本地分支到远程分支
#推送本地分支到远程仓库
git push (远程仓库名) (本地分支名)
- 抓取远程分支
#抓取远程的分支
git clone (仓库地址)
当然,这只能抓取到master分支,如果要抓取其他分支,还要使用下面的命令。
git checkout -b dev origin/dev
- 与其它工作人员同时编辑dev分支上的一个东西,发生冲突怎么办?
- 将本地dev分支和远程dev分支进行关联。
git branch --set-upstream-to=origin/dev dev
- 拉取远程最新的分支
git pull
如果远程库和本地库合并有问题怎么办呢?那就参见前面的解决冲突的办法就可以了。 这部分内容在5.2节。
【未完待续】