分支定义
branch是一个commit的引用,可以理解为初试commit到branch所指向的commit的路径。
git维护的是commit链。分支就是最后一个commit的引用,每一个commit都引用着前一个commit,这就构成了一个链条,也就是分支。每一个git仓库都默认维护着者一个分支master(主分支)。
master主分支为1—→2—→3—→4构成的commit链,master是指向commit4的引用。
branch1分支为1—→2—→5—→6构成的commit链,branch1实际是指向commit6的引用。
分支创建
使用git branch 分支名 创建分支
git branch new_branch
此时git branch (查看共有几个分支)
控制台 $ git branch
* master //星号表示当前在使用的分支
new_branch //新创建的分支
切换分支
使用git checkout 分支名 切换分支
此时切换到new_branch 分支上
git checkout new_branch
然后git branch
控制台 $ git branch
master
* new_branch //当前使用的分支
使用git checkout -b 分支名 创建并切换分支
分支修改的原理是,在不同的分支上工作区的 文件 是不同的。
比如在新的分支上新建了一个文件,那么在原来的分支上 是看不见此文件的。
删除分支
分支的删除有两种情况:①新建的分支中,没有对文件修改。②新建的分支中,对文件进行了修改。
第一种情况下删除分支,可以直接使用git branch -d 分支名 命令。
首先 git branch 查看当前的分支
控制台输出
$ git branch
* master
//当前只有一个master分支
git checkout -b new_branch //创建并切换分支
此时git branch
控制台输出
$ git branch
master
* new_branch //已经创建分支并切换
此时并没有修改文件,可以直接删除
git branch -d new_branch
控制台输出
error: Cannot delete branch 'new_branch' checked out at '路径/mygit'
//此时不能删除,因为当前的分支在new_branch上
//需要切换到别的路径上,才可以删除
切换分支master上 git checkout master
然后删除new_branch分支 git branch -d new_branch
此时 git branch
控制台输出
$ git branch
* master
//new_branch已经删除
第二种情况下删除分支,有两种方法:暴力删除和处理修改后删除。
此时的分支图如下
image
new_branch比master多了一个commit,核心就是处理这个commit。
暴力删除 git branch -D new_branch 命令
首先clean git
直到控制台 git status 输出
On branch master
nothing to commit, working tree clean //清空git
切换至 new_branch 使用git checkout new_branch命令
修改text.txt文件 并提交
此时git log 最近一次的提交就是刚刚的提交
commit 00dfce97f1e9de98e662cb2c21500bd2bf6f681f
Author: shz <935202401@qq.com>
Date: Sat Feb 23 09:58:57 2019 +0800
add a new line in new_branch
首先切换至 master 使用git checkout master命令
如果使用git branch -d new_branch
控制台
error: The branch 'new_branch' is not fully merged.//错误:分支new_branch没有完成合并
If you are sure you want to delete it, run 'git branch -D new_branch'.//如果想要删除,需要运行git branch -D new_branch命令
直接删除掉 git branch -D new_branch
此时查看git branch 命令
控制台输出
* master //分支被删除了
分支的删除 也就是分支上文件修改的删除
使用合并来处理 分支的修改提交
使用git checkout -b new_branch 创建并切换分支
在新的分支上 修改并提交信息
在新的分支上的log记录
commit cc719ab66d4b54e071f03b5b71947b6edc13c92f //这是新的分支上最新的提交
Author: shz <935202401@qq.com>
Date: Sat Feb 23 10:24:48 2019 +0800
add a new line in new_branch
commit 692f1d00f2b4cf64f8e1299b2d35317196e3017a
Author: shz <935202401@qq.com>
Date: Fri Feb 22 14:02:34 2019 +0800
update
commit 6db0e57a419169d4708aa166901559543a70d13e
Author: shz <935202401@qq.com>
Date: Fri Feb 22 14:01:30 2019 +0800
update
切换至master 并查看commit log
commit 692f1d00f2b4cf64f8e1299b2d35317196e3017a
Author: shz <935202401@qq.com>
Date: Fri Feb 22 14:02:34 2019 +0800
update
commit 6db0e57a419169d4708aa166901559543a70d13e
Author: shz <935202401@qq.com>
Date: Fri Feb 22 14:01:30 2019 +0800
update
我们发现master和new_branch的commit log信息,master比new_branch少一个commit。
将new_branch合并至master
使用git merge new_branch
控制台输出
Updating 692f1d0..cc719ab //更新了692f1d0的提交
Fast-forward //快进
text.txt | 1 + //text.txt修改了
1 file changed, 1 insertion(+)
create mode 100644 text.txt
此时 git log 控制台
commit cc719ab66d4b54e071f03b5b71947b6edc13c92f
Author: shz <935202401@qq.com>
Date: Sat Feb 23 10:24:48 2019 +0800
add a new line in new_branch //直接将new_branch的提交快进过来
commit 692f1d00f2b4cf64f8e1299b2d35317196e3017a
Author: shz <935202401@qq.com>
Date: Fri Feb 22 14:02:34 2019 +0800
update
此时文件就是new_branch 修改之后的内容
commit 已经处理了就可以删除new_branch分支
git branch -d new_branch
此时分支流程如下
分支合并(master快进)
image
删除分支
image
合并冲突
上面说了master 快进的一种情况。
下面说明一种情况,对于同一个文件都进行了修改,如何解决冲突。图示如下:
image
创建new_branch分支并切换
git checkout -b new_branch
在新的分支上修改文件 并 提交
将new_branch合并至主分支 使用 git merge new_branch
控制台输出
Auto-merging text.txt //自动合并的文件 text.txt
CONFLICT (content): Merge conflict in text.txt //合并冲突text.txt
Automatic merge failed; fix conflicts and then commit the result.//自动合并失败,开发者需要解决冲突并提交
开发者需要解决冲突
text.txt的文件内容
<<<<<<< HEAD
hello master //这是master的修改内容
=======
hello new_branch //这是new_branch的修改内容
>>>>>>> new_branch
解决的方式:①删除掉 分支修改部分
hello master
②删除掉 主分支修改部分
hello new_branch
③都不删除
hello master
hello new_branch
采用以上的方式解决冲突后 add并提交信息
控制台会输出
[master fe8365c] fix conflict 解决冲突
网友评论