git学习笔记(十三)--git的合并
在大致学习完git的本地操作后,现在主要学习一下git协同工作的知识,这也是git的精华和关键。
大体上要调整一下学习策略,抓住重点的知识,迅速掌握核心的一些命令,而一些小的技巧和问题,先放一放,有时间慢慢学,毕竟git的学习成本比较高,想要全面用好,会用,是需要一个过程的。
git在数据交换使用的协议:
git支持丰富的协议,比如ssh,git,http,ftp还有本地协议~
其中ssh,git,和本地协议属于智能协议,也是这次重点了解和学习的三个协议。
SSH协议用来和服务器进行数据交换
ssh://[user@]exaple.com[:80]/user/local/git/repo.git
[user@]exaple.com:/user/local/git/repo.git
GIT协议是最常用的只读协议,可以快速从服务器端下载最新的版本库
git:example.com:80/usr/local/git/repo.git
其中git是协议名,example.com是网址(或用IP表示),80是端口号,/usr/local/git/repo.git是版本库的绝对路径
本地协议可以让我们在本地模仿远程操作,这次学习主要先使用本地协议。
图1:
在本地建立一个共享库sharerepo,从sharerepo克隆共享库直接初始化用户user1和user2

图2:
在user1中创建一个文件,提交后push到共享库,从user2中pull最新提交,在本地查看后发现有新文件

图3:
可能遇到一个快速推送的问题,当在user1中上传修改更新共享版本库后,user2不能在旧的版本库基础上直接提交,必须建立在远程版本库对应分支最新提交的基础上才能上传,因此一般要先从共享版本库Pull回来最新的提交

图片4:
解决上述问题,pull回来后,发现多了一个text_user1文件,这时候再push,就没有问题了

下面通过一个例子了解合并冲突和解决方法:
图片5:在user1的文件profile_user1中添加一行“冲突解决”,push到共享服务器;在user2的文件profile_user1中也添加一行“解决”

图片6:user2中的也上传到本地版本库,然后执行pull操作,发现提示:“自动合并失败,修正冲突然后提交修正结果”
在下面profile_user1文件中,连续7个<组成的<<<<<<<表示发生冲突位置的本地内容,连续7个=组成的========表示分隔符,连续7个>组成的>>>>>>>表示pull回来的分歧内容

图7:
① 查看暂存区中的记录:用git ls-files -s命令
② 发现Profile_user1对应有3个文件,在以前的学习中,我们知道git ls-files对应输出的内容的含义,其中第三列指的是暂存区,如果正常,应该都为0暂存区,现在有1,2,3暂存区,表示出现冲突,其中1暂存区保存的是冲突发生之前双方的共同祖先内容;2暂存区保存的是本地修改后的内容;3暂存区保存的是远程版本库中新提交后的内容;
③ 我们修改该文件,然后提交
④ 查看日志,发现有合并操作
⑤ 再次查看暂存区,只有0号出现了

注意:
- 每次从共享版本库pull,都是pull的最新提交,过往的旧提交不会pull下来。
- git pull其实相当于git fetch + git merge 而git merge一般都带有提交操作,也就是每次我们pull一个回来,都会产生一个新的合并提交
- 当发生冲突后,默认不会merge,内容都保存在暂存区,需要我们自己解决冲突,然后自己提交
最后:
关于合并冲突的地方,需要经验的积累,不要随意改动已经上传文件的名字,不要随意改变一些函数的调用关系和返回值
多创建tag,多利用branch,才能发挥git的威力,继续学习!
浙公网安备 33010602011771号