一、分支理解
(1)文件保存
GIT保存的不是文件,而是一系列不同时刻的快照。
(2)首次提交
首次提交的对象中有五个对象:三个blob对象(保存着文件快照)、一个树对象(记录着目录结果和blob对象索引)以及一个提交对象(包括指向书对象的指针和所有提交对象)。
(3)修改后再提交
做出修改之后再次提交,如此产生的提交对象会包含一个指向上次提交对象(父对象)的指针。
(4)GIT分支
GIT分支本质上仅仅是指向提交对象的可变指针。默认分支的名称是master。
简单来说,GIT分支就是从主线上分离出来的一个支路。在操作时不会影响到主线的操作,但又可以在主线的基础上进行一些修改,在解决问题之后,再次合并到主线上。
举例如下:
二、分支操作
(1)分支创建
GIT分支创建就是在目前最后一次提交的快照上创建一个可以移动的新指针。
如上图:创建一个名为testing的分支
git branch testing
拓展:
Git如何知道自己在哪一个分支上?
Git中有一个HEAD的特殊指针,指向当前所在的本地分支。
查看当前在哪个分支上
git log --oneline --decorate
(2) 分支切换
切换到一个已存在的分支:
此时,HEAD指向testing分支
此时重新提交,即可发现此时HEAD指针如下
此时,切换回master分支
拓展:查看分支历史
拓展:创建新分支并切换
git checkout -b 分支名
(3)分支的合并
分支的合并
git merge 分支名
分支删除
git branch -d 分支名
(4)遇到冲突时的分支合并
问题描述:在两个不同的分支zing,对同一个文件的同一部分进行了不同的修改,Git就没办法进行合并。
问题解析:此时Git做了合并之后,没有自动的创建一个新的合并提交。而是暂停,等待人工进行解决冲突。
问题解决:在发生合并冲突后,使用git status来查看哪里不一致导致未合并。之后及时进行修改。
(5)分支管理
①、git branch
该命令不加任何参数就是列出所有的分支
加*的分支,是代表当前HEAD指针所指向的分支。
②、git branch -v
该命令是查看每一个分支的最后一次提交。
③、git branch --merged/--no-merged
该命令是查看分支是否合并
git branch --merged :查看那些分支已经合并到当前分支。结果中为加*的分支即可以删除掉。
git branch --no-merged:查看所有未合并工作的分支。
④、git branch -D 分支名
该命令可以强制删除分支并丢掉目前提交的所有。
三、问题
(1)分支合并
一般在进行git操作的时候出现Already up to date.问题有两种情况
一、当前分支的文件和远程仓库的文件不统一,这时候就需要将远程仓库的文件同步到本地仓库后再merge
git pull origin 分支名 # 更新本地仓库数据
git merge 要合并的分支名 # 重新合并分支
git push origin 远程分支名 # 提交合并后的数据
二、本地仓库有新增的文件没有add和commit
git add .
git commit -m "描述信息"
git merge 要合并的分支名 # 重新合并分支
git push origin 远程分支名 # 提交合并后的数据
参考:GIT官方分支解释