前言
版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。
下面以一个图形象的表示分支的概念。
一、分支相关命令
1、查看分支(git branch -v)
git branch -v
2、创建分支(git branch xx)
这里创建一个名为 hot-fix 的分支
git branch -v git branch hot-fix git branch -v
3、切换分支(git checkout xx)
1、切换到 hot-fix 分支
git checkout hot-fix git branch -v
可以看到 hot-fix 分支前有个*,代表当前所处的分支
2、在 hot-fix 分支修改文件后查看状态,此时工作区存在未提交的hello.txt。需要重复添加暂存区-提交本地库的过程
tips:git checkout - //可以表示切换到上一个分支
把 hot-fix 做的改动添加到暂存区,并提交本地库形成历史版本及查看版本信息
git add hello.txt git status git commit -m "hot-fix first commit" hello.txt git reflog
.git中的HEAD文件
4、合并分支(git merge xx)
①、正常合并
要转到想要合并到的分支上,git merge 要合并的分支
git checkout master git reflog git merge hot-fix cat hello.txtv
master 分支的 hello.txt 成功修改了
②、冲突合并
问:什么时候会遇到合并冲突?
答:合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git 无法替我们决定使用哪一个。必须人为决定新代码内容。
1) 复现冲突:
在 master 分支:
vim hello.txt git add hello.txt git commit -m "master test" hello.txt
在 hello.txt 倒数第二行新增 master test
在 git checkout hot-fix 分支:
git checkout hot-fix vim hello.txt git add hello.txt git commit -m "hot-fix test" hello.txt
在 hello.txt 倒数第一行新增 hot-fix test
接下来依次执行下述指令:
git checkout master git merge hot-fix git status
根据报错可以看到由于两个分支的文件均被修改,导致合入失败,目前显示正在合并(master | MERGING)。
vim hello.txt
<<<<和====之间是当前分支代码
====和>>>>之间是合并的代码
明显看到这两处代码都做了修改,那么 git 就不知道要保留哪个部分
2) 解决办法:
手动合并代码
vim hello.txt
删除多余的内容,保留如下信息:
git status git add hello.txt git commit -m "merge test"
注意:此时只能用git commit -m "merge test" 而不可以用 git commit -m "merge test" hello.txt,否则会报错如下错误
MERGING状态已不存在了,此时代码合并成功。
cat hello.txt
二、团队协作
需要用到代码托管中心,把代码推送到远程服务器
push 将代码上传到远程库
clone 将代码复制到本地
pull 将代码拉取到本地(pull 是本地已有文件,clone是本地无源代码)
fork 将代码从其他团队的远程库复制到自己的远程库
1、团队内协作
2、跨团队协作
fork 将代码从其他团队的远程库复制到自己的远程库,可以从自己的远程库clone。修改完成后push到自己的远程库。之后发送pull request向其他团队的远程库,经审核后即可使用merge合并