Git学习笔记三:Git分支
2017-09-17 10:16
309 查看
git默认只有一条主分支,称为master,master上一般是稳定的系统,当我们开发新功能的时候,应该新建一个分支(branch),在分支下面做开发工作,确认分支下的系统通过测试之后,再将分支合并到master主分支上。原则上,可以新建多个分支,各分支上的工作互不干扰。
1、如何新建并切换分支
$git checkout -b mybranch
这条命令相当于执行了以下两条命令
$git branch mybranch
$git checkout mybranch
Switched to a new branch 'mybranch'
M test.txt
2、如何查看现有的分支
$git branch
master
* mybranch
我们可以看出,mybranch左边有一个*号,证明目前的指针是在mybranch分支上的,所以我们所做的commit操作也是在mybranch上面执行,不会影响master
3、合并分支
我们先把text.txt写上hello world,执行add和commit指令。如下:
$ git add test.txt
$git commit -m "提交helloworld"
然后执行
$git checkout master
此时我们可以发现,test.txt里面的hello world文本信息消失了!由于我们切换回了主分支,mybranch分支上的修改是不会对主分支产生影响的,所以接下来,我们需要将mybranch分支上的修改合并到master主分支上。
$git merge mybranch
Updating 03ea170..9b520e0
Fast-forward
test.txt | 1 +
1 file changed, 1 insertion(+)
现在打开text.txt,就可以看到hello world了。这里需要注意到的一点是,这里采用了fast-forward的模式,这种模式合并是不会产生合并历史记录的,也就是不能通过git log查到有这条合并记录,可以加上--no-ff强势不使用fast-forward模式:
$git merge --no-ff -m "合并分支" mybranch
4、删除分支
当我们开发完功能并将分支合并到master主分支上之后,mybranch分支就可以删掉了。
$git branch -d mybranch
5、产生冲突
在多人协作的时候,冲突是不可避免的,冲突的概念这里就不讲了,我们来模拟一个版本冲突。
$git checkout -b dev
修改test.txt文本,追加字符串“dev branch”,此时文本内容为"hello world dev branch"
$git add test.txt
$git commit -m "dev branch commit"
切换回master主分支
$git checkout master
修改test.txt文本,追加字符串“master”,此时文本内容为"hello world master"
$git add test.txt
$git commit -m "master branch commit"
$git merge dev
此时就会出现冲突提示,因为dev分支和主分支都有修改文件,而且它们提交的上一个版本是相同的,这时候就会有冲突,提示信息如下:
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.
我们打开test.txt,就会发现里面的文本如下:
<<<<<<< HEAD
hello world master
=======
hello world dev branch
>>>>>>> dev
意思是当前版本信息为hello world master,而dev分支信息为hello world dev branch,它们合并的时候起了冲突,我们使用
$git status
查看的时候,会看到红色的字体信息:both modified: test.txt
6、解决冲突
手动打开test.txt并对内容修改为"hello world!",修改完成后执行以下命令,其中,git add命令就是标记冲突已解决
$git add test.txt
$git commit -m "conflict fix"
$git status
就可以看到如下内容,证明冲突已经得到解决,并且工作空间是干净的。
nothing to commit, working tree clean
接下来我们可以使用如下命令查看合并历史情况:
git log --graph --pretty=oneline --abbrev-commit
* 875fe91 (HEAD -> master) conflict fix
|\
| * 3fbc131 (dev) dev branch commit
* | 542ceca master branch commit
|/
* 9b520e0 提交hello world
最后,合并之后记得可以删掉dev分支,大功告成
1、如何新建并切换分支
$git checkout -b mybranch
这条命令相当于执行了以下两条命令
$git branch mybranch
$git checkout mybranch
Switched to a new branch 'mybranch'
M test.txt
2、如何查看现有的分支
$git branch
master
* mybranch
我们可以看出,mybranch左边有一个*号,证明目前的指针是在mybranch分支上的,所以我们所做的commit操作也是在mybranch上面执行,不会影响master
3、合并分支
我们先把text.txt写上hello world,执行add和commit指令。如下:
$ git add test.txt
$git commit -m "提交helloworld"
然后执行
$git checkout master
此时我们可以发现,test.txt里面的hello world文本信息消失了!由于我们切换回了主分支,mybranch分支上的修改是不会对主分支产生影响的,所以接下来,我们需要将mybranch分支上的修改合并到master主分支上。
$git merge mybranch
Updating 03ea170..9b520e0
Fast-forward
test.txt | 1 +
1 file changed, 1 insertion(+)
现在打开text.txt,就可以看到hello world了。这里需要注意到的一点是,这里采用了fast-forward的模式,这种模式合并是不会产生合并历史记录的,也就是不能通过git log查到有这条合并记录,可以加上--no-ff强势不使用fast-forward模式:
$git merge --no-ff -m "合并分支" mybranch
4、删除分支
当我们开发完功能并将分支合并到master主分支上之后,mybranch分支就可以删掉了。
$git branch -d mybranch
5、产生冲突
在多人协作的时候,冲突是不可避免的,冲突的概念这里就不讲了,我们来模拟一个版本冲突。
$git checkout -b dev
修改test.txt文本,追加字符串“dev branch”,此时文本内容为"hello world dev branch"
$git add test.txt
$git commit -m "dev branch commit"
切换回master主分支
$git checkout master
修改test.txt文本,追加字符串“master”,此时文本内容为"hello world master"
$git add test.txt
$git commit -m "master branch commit"
$git merge dev
此时就会出现冲突提示,因为dev分支和主分支都有修改文件,而且它们提交的上一个版本是相同的,这时候就会有冲突,提示信息如下:
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.
我们打开test.txt,就会发现里面的文本如下:
<<<<<<< HEAD
hello world master
=======
hello world dev branch
>>>>>>> dev
意思是当前版本信息为hello world master,而dev分支信息为hello world dev branch,它们合并的时候起了冲突,我们使用
$git status
查看的时候,会看到红色的字体信息:both modified: test.txt
6、解决冲突
手动打开test.txt并对内容修改为"hello world!",修改完成后执行以下命令,其中,git add命令就是标记冲突已解决
$git add test.txt
$git commit -m "conflict fix"
$git status
就可以看到如下内容,证明冲突已经得到解决,并且工作空间是干净的。
nothing to commit, working tree clean
接下来我们可以使用如下命令查看合并历史情况:
git log --graph --pretty=oneline --abbrev-commit
* 875fe91 (HEAD -> master) conflict fix
|\
| * 3fbc131 (dev) dev branch commit
* | 542ceca master branch commit
|/
* 9b520e0 提交hello world
最后,合并之后记得可以删掉dev分支,大功告成
相关文章推荐
- Git 分支管理策略学习笔记
- GIT 学习笔记(3) —— GIT分支
- Git学习笔记(2) — 分支控制(branch)
- git学习笔记(二):分支和远程仓库
- Git学习笔记(七)---分支管理
- Git与GitHub学习笔记(四)合并远程分支
- 【Git学习笔记】Bug分支——创建branch切换checkout
- 我的Git学习笔记(二) git分支理解
- git学习笔记--创建和合并分支
- git学习笔记二(分支管理)
- Git学习笔记(3)-分支管理
- Git学习笔记五--分支管理
- git学习笔记-7 git checkout 切换分支
- 【Git/Github学习笔记】Git分支管理(一)
- git学习笔记 -- day04 分支管理
- 学习笔记_Git之分支创建策略
- 使用git 之三 分支(学习笔记三)
- 【Git学习笔记】创建和合并分支
- git的学习笔记(分支管理)
- 【Git学习笔记】用git pull取回远程仓库某个分支的更新,再与本地的指定分支自动merge