目录
5.现在在分支div2里创建了一个文件A.txt,提交到版本库之前哪个分支都可以看到这个文件,但是提交之后,在div2分支可以看到这个文件,切换到master的时候却无法看到这个文件
6.dev2里加个文件B.txt,然后在dev里提交,B.txt就到了dev里
2.可以切换到master删除一个合并后的或者没有发生变化的分支
1.在dev2分支里面修改A.txt文件添加一行 update by dev2后提交
2.在master分支里面修改A.txt文件同时添加一行 update by master后提交
Git 的默认分支就是 master,之所以几乎每一个仓库都有 master 分支,是因为 git init 命令默认创建它。
一、分支创建
通过git branch来查看和创建分支。
1.查看分支
git branch
2.创建分支
git branch dev
之前只有一个master,现在创建了dev分支
3.分支切换到dev
git checkout dev
最近的两个分支来回切换
git checkout -
4.创建分支与切换分支同时完成
git checkout -b dev2
5.现在在分支div2里创建了一个文件A.txt,提交到版本库之前哪个分支都可以看到这个文件,但是提交之后,在div2分支可以看到这个文件,切换到master的时候却无法看到这个文件
原因:
git是记录某个文件的状态,只要这个文件没有提交到版本库,其他的分支上都能看到这个文件及其状态,但是只要提交到版本库,其他分支就看不到了
规律:
无论创建多少个分支,只要这个东西没有提交到版本库,在工作区、暂存区这个状态下,其他的分支都可以看到这个状态
6.dev2里加个文件B.txt,然后在dev里提交,B.txt就到了dev里
可以得出:不管开始在哪写的,只看最终是在哪个分支提交的,最终在哪个分支提交的文件就在哪个分支里
二、分支删除
1.不能删除自己所在的分支
2.可以切换到master删除一个合并后的或者没有发生变化的分支
dev分支没有发生变化,所以删除成功了
3.如果一个分支发生了变化不能删除
dev2分支发生变化了而且也没有合并,所以不能删除
dev2发生了变化,同时没有合并不能删除。如果要强制删除可以git branch -D dev2
三、分支合并
1.在上面的操作中把dev和dev2都删除了,所以先创建一个分支dev2并在dev2分支创建一个文件A.txt并且提交,然后切换到master上做dev2 的合并
git merge dev2
可以看到master分支上也添加了A.txt这个文件,现在master和dev2是一样的了
2.如果修改的是同一个文件也可以做同样的合并,切换到dev2分支修改A.txt中的内容。在A.txt中添加了一行world,但是并没有提交
3.切换到master分支的时候发现提示了A.txt的变动。通过合并发现master分支上也合并了dev2修改的内容,合并之后dev2就删除就被允许了。
四、分支的本质
1.
master指向的是提交
HEAD是指向当前的分支,当前在哪个分支HEAD就指向哪个分支
第二张图上可以看到创建了dev的分支,当切换到dev分支的时候HEAD就会指向dev
2.当进入.git文件夹查看HEAD的内容的时候可以看到,所处分支不同内部的文件指向就不同。
master分支
dev分支
3.git的分支与svn不同,git用的是指针。如果dev发生修改提交,dev的版本就会向后移动。
在master分支上如果合并就会出现下面的图
五、分支的冲突
1.在dev2分支里面修改A.txt文件添加一行 update by dev2后提交
2.在master分支里面修改A.txt文件同时添加一行 update by master后提交
3.合并的时候发现出现冲突
<<<<<<<<<<<HEAD是当前指向的分支所修改
>>>>>>>>>>dev2是dev2分支修改
需要手工合并,修改后保留了master的内容
4.可以通过图形来查看冲突的提交日志
git log --graph