git fetch 和 git pull
2016-10-24 本文已影响0人
_挑灯看剑_
git fetch 远程库名称 远程分支名称:分支名称
git pull 远程库名称 远程分支名称
远程库 位于github中:
1.png
远程仓库中 driver.txt的内容为 SqlServerDriver
本地仓库 为于pc/windows10/wangbinghua 主机上:
2.png
本机上的driver.txt 中内容为 MySqlDriver,这个内容是一个旧版本的内容,因此需要从远程上获取最新的内容。
本地分支图:
3.png
如果之间没有任何的和远程仓库相关的操作,那么 origin/master 分支始终指向某一个commit节点,而不会发生改变,唯一可以改变的是本地的master分支,即每次在本地进行一次提交,那么HEAD指针就会向前走一步。当前的HEAD指针,即是master分支或者其他的分支。
4.png
现在进行操作 git fetch origin master,即将远程的最新更新内容从远程仓库中取出来,那么origin/master 即远程master分支,将会前进。
5.png
此时只要在本地进行 add 和 commit操作,那么本地的HEA指针对应的master分支就会向前进。从而网络图中就可以看到在本地出现了两条分支 origin/master 和 master分支。当然,origin/master 分支是隐形的。通过git branch –a是无法看到的。
出现这两个分支,接下来要进行的操作就是要合并分支,将master分支和origin/master分支进行合并。
切换到master分支上,进行合并,git merge origin/master 将origin/master 分支进行合并。
6.png
master分支和origin/master 分支在合并的过程中必然会出现冲突,因此要解决冲突,解决冲突之后,文件内容必然会发生变化,因此要将有冲突内容的文件进行add和commit,因此本地分支的节点向前增加一个。
7.png
解决冲突完毕之后,自动合并分支。但是问题出现了,origin/master 即远程master分支和本地的master分支,并不进行同步,要和远程仓库进行联系,使得远程的master分支和本地的master分支进行同步,即让origin/master分支也要处在本地的HEAD指针指向的master分支上。否则远程仓库和本地仓库就无法进行同步。因此在本地的master分支上,进行push操作。git push origin master
8.png
也可能是这样的:
9.png
在本地每次从远程仓库fetch一次,节点便向后增加一个,那么origin/master 分支始终指向最后一次fetch的节点。那么origin/master 分支要和 本地的master进行合并,此时不需要考虑冲突的问题,直接切换到本地的master分支,git merge origin/master 操作。此时,只需要 fast forward,本地的HEAD指针,迅速向前移动即可。
10.png
这就完成了本地仓库和远程仓库的同步。
git fetch 远程仓库名称 远程仓库分支名称:本地分支名称
git fetch origin master:new
11.png
在当前的HEAD指针指向的commit节点处会生成一个new分支,这个new分支负责和远程origin/master 分支进行同步,new分支保持和远程库的master分支内容同步。每次fetch一次到new分支上,节点向后面增加一个。
不断fetch完成之后,在本地分支上进行不断提交,每次提交到本地master分支一次,master分支的节点向后面增加一个。
如下图:
12.png
此时要对master分支和new分支进行合并,必然会出现冲突,解决完冲突之后,文件的内容必然会发生变化,因此要将有冲突内容的文件重新提交到本地的master分支上。因此在本地master分支上,又会增加一个节点。
13.png
因此切换到master分支上,执行 git merge new
14.png
解决完毕冲突,合并完毕之后,发现 master分支和远程库的origin/master分支,不进行同步,因此执行 git push origin master,使得origin/master 分支也指向本地master分支,使得本地库和远程库进行同步。
15.png
同步完毕之后,本地的new分支没有用,则可以进行删除。git branch –delete new。即将new分支进行删除掉。
16.png
本地仓库和远程仓库达到一致。