七、分支管理
分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。
现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。
HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。
当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:
假如我们在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并:
案例:
第一步:创建dev分支,然后切换到dev分支:
第二步:查看当前分支:
第三步:在当前dev分支上,编写文件test.txt,并提交到dev分支:
第四步:切换分支到master:
此时,在master分支上并不能看到test.txt文件
第五步:把dev分支的工作成果合并到master分支上:
第六步:删除dev分支:
八、解决冲突
第一步:创建新分支,并在此分支上修改test.txt文件,然后提交:
修改test.txt文件
第二步:切换到master分支,修改test.txt文件,然后提交:
修改test.txt文件
第三步:将feature1分支合并到master
此时,由于冲突报错了,现需要修改其中一分支下的文件,然后重新提交,合并!
查看分支合并情况:
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而默认的fast forward合并就看不出来曾经做过合并。
九、BUG分支
当正在dev分支上开发新任务时,测试组给提了一个线上的bug需及时修复,这是就需要在master分支上创建新分支来进行修复,但是开发的现场又需要保存下来!
第一步:查看当前分支信息,当前分支dev上还有未完成待提交的文件,并保存现场:
第二步:切换到master分支,并创建bug分支,进行bug修复:
第三步:切换到master分支,合并提交,然后删除临时分支:
第四步:切换到dev分支,恢复现场,继续工作:
恢复现场的两种方式:
没有被合并的分支,删除时会报错:
使用-D进行强行删除:
十、多人协作
1. 当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin
2. 推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上
3. 抓取分支,
十一、标签管理
Git的标签是版本库的快照,其本质是指向某个commit的指针。
1. 创建标签
2. 在历史的commit id上打标签
3. 查看标签信息:
4. 用PGP签名标签:
5. 推送某个标签到远程:
推送全部标签到远程:
6. 删除本地标签:
删除远程标签: