git基本操作四:分支的操作与冲突解决

查看当前分支,git branch后面没有接任何的参数的时候,仅会输出当前在这个项目上有哪个分支。Git会默认设置一个名为master的分支。

git branch

要想创建一个分支,git branch后面加上想要创建的分支的名字

git branch cat

在这里插入图片描述
更改分支名称,使用-m参数

git branch -m cat tiger

在这里插入图片描述
删除当前分支使用-d参数

 git branch -d dog 

在这里插入图片描述
如果要删除的分支没有被合并,使用-d参数是无法删除的,这时使用-D参数强制删除。
切换分支就是git checkout

git checkout cat

在这里插入图片描述
我们在cat分支下,新建两个文件,cat1.html,cat2.html。然后add,commit。查看当前的文件信息

在这里插入图片描述
然后切回到master分支。

 git checkout master 

再次查看文件的信息
在这里插入图片描述
刚才那两个文件不见了,其实它们都还在,只是在不同的分支而已,只要切回到cat分支,文件又会出现。
那么分支到底是什么呢。可以把分支当作一个贴纸,贴在某一个Commit上面。
那么切换分支的时候到底发生了什么呢。主要是做了两件事情
1、更新暂存区和工作目录
在切换分支的时候,会用该分支指向的那个Commit内容来更新暂存区和工作目录
2、改变HEAD的位置
HEAD也会指向刚刚切换过去的那个分支,也就是说.git/HEAD文件会一起被改动。
如果将文件改动到一半,就切换到master会发生什么事情。
我们在cat分支下创建一个cat3.html,同时对welcome.html做了一些修改。这时切回到master分支。
在这里插入图片描述
我们查看文件的信息。
在这里插入图片描述
可以看到刚刚新增的cat3.html文件还在。Git的状态和刚刚在cat分支时的状态是一样的。这是因为在切换分支的时候会用该分支指向的那个Commit的内容来更新暂存区和工作目录,但是这个修改还未提交到存储库,所以不会更新。
接下来我们看看合并分支的操作。
如果任务执行的差不多了,就要合并到master分支。要想合并,先切回到master分支。然后使用git merge命令来合并分支

git merge cat

在这里插入图片描述
此时cat分支里面的文件都合并到master分支里面了。
如果删除还未合并的分支会发生什么,我们在tiger分支里面新建两个tiger1.html和tiger2.html文件,然后删除。

git branch -d cat 

Git会提醒你还没完全合并
在这里插入图片描述
但是我们强制删除
在这里插入图片描述
这里记住Git提示你了曾为4be59cb。虽然说是已经删除tigger分支了,但是Commit任然存在,之前我们说过,分支只是指向某个Commit的指标,删除这个指标并不会使那些Commit消失。
原先领先的master分支的那两个commit,现在虽然看不到,但他们是存在的。现在我们接回来

git branch new_tigger 4be59cb

这个命令是帮我们创建一个叫做new_tigger的分支,让它指向4be59cd这个Commit。查看现在的分支。

在这里插入图片描述
然后切回到new_tigger
在这里插入图片描述
我们甚至可以用这个命令来合并

git merge 4be59cb

所谓的合并分支其实是合并分支指向的那个“Commit”
还有一种合并分支的方式,rebase。
我们切换到cat分支
然后合并dog分支

git rebase dog

在这里插入图片描述
如果在不同分支里面修改了同一个文件的同一行,这时候合并就会发生冲突。
我们在master,cat,dog分支里面都修改一下index.html文件,然后合并
在这里插入图片描述
这时候Git发现这个index.html文件出现问题了,查看一下当前的状态。
在这里插入图片描述
因为index.html文件两边都进行了改动,所以Git把它标记成双方添加的状态。
我们查看index.html里面的内容。
在这里插入图片描述
Git把有冲突的段落标记出来了。上面是HEAD,也就是当前所在的master分支,中间是分隔线,下面是dog分支的内容。要解决这个问题,看看到底该用谁的代码。我们采用mster的代码,把那些标记修掉。然后切记把这个改动加回暂存区,然后Commit
在这里插入图片描述
如果使用rebase方式来合并,也会出现冲突。
在这里插入图片描述
这时合并到一半就已经被阻止了。查看此时的状态。在这里插入图片描述
可以知道的是还是index.html文件标记成双方都修改了。与上面提到的方法一样,修改冲突的内容然后加回暂存区。
在这里插入图片描述
修改完成。
这是文本文件的操作,我们可以直接修改。如果是同一张照片的文件合并的时候发生了冲突怎么办呢。
这时候的操作还是,先决定使用哪个版本。决定之后,然后加入暂存区,然后Commit。如果当前是在cat分支

git checkout --ours animal.jpg

如果要使用dog分支图片,使用–theirs参数

git checkout --theirs animal.jpg

那么分支到底是什么呢,其实就是一个只有一个40字节的文件而已。
在.git/ref目录下面有一个heads子目录。
在这里插入图片描述
分支其实就放在这里。查看一下这些文件的内容。
在这里插入图片描述
这其实就是某个Commit的SHA-1值而已。如果删除某个文件。这时候某个分支也不见了。
在这里插入图片描述
或者我们在cat改名为bird
在这里插入图片描述
那么Git是如何知道在哪个分支的呢。其实.git目录下面有一个HEAD文件。
我们看一下里面的内容
在这里插入图片描述
其实HEAD的内容很简单,只是记录着当前分支指向的内容。
我们可以看到.git目录下同时还有一个ORIG_HEAD的文件,在做一些比较危险的操作如(Merge,Rebase或Reset)的时候,Git就会把HEAD的状态存放在该文件中,这样可以让你随时跳回危险动作之前的状态。
我们还可以回到过去的某个Commit在做出新的分支。首先要回到那个Commit的状态。使用git checkout命令。

git checkout 28a728a

在这里插入图片描述
此时正处于detached HEAD状态。可以从现在这个Commit开出新分支,使用-b参数直接切过去

git checkout -b bird

在这里插入图片描述
或者一行搞定

git checkout -b bird 28a728a
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值