Github命令_git fetch、git merge、git pull、FETCH_HEAD、HEAD

在.git目录中会有一个名为FETCH_HEAD的文件;

每一个执行过fetch操作的项目都会存在一个FETCH_HEAD列表,其中每一行对应于远程服务器的一个分支。

也就是说这个文件保存了远程仓库中每个分支的FETCH_HEAD。这个FETCH_HEAD指向了该分支最近的一次commit;

其实跟HEAD是一回事,只是这个HEAD是指向的远程仓库某个分支的最新的一个commit;

这样我们就知道了执行git fetch的本质就是更新远程仓库分支的commit记录,并且更新FETCH_HEAD,保证其指向该分支最近的一次commit;

git fetch origin branch1  //如果指定了某个远程分支,那就更新这个分支的commit记录及FETCH_HEAD;

//如果不加分支名的话,更新该仓库的所有分支的commit记录以及FETCH_HEAD;

====================================================================

顺便说一下HEAD的概念

HEAD实际上就是一个指向某个commit的引用;表示的是你当前指向的记录;

默认情况下HEAD指向的是这个分支名,分支名永远指向该分支的最近一次commit;

也就是说默认情况下HEAD指向分支的最近一次提交;

HEAD -> master -> C1

当你进行一次新的commit时,HEAD就会从此前指向的commit往后产生该新的commit,并指向该新的commit;

这里引入一个新的概念DETACHED_HEAD,即分离的HEAD

分离的HEAD指向的是一个commit,而不是指向分支名;

Git学习系列15 HEAD ORIG_HEAD FETCH_HEAD detached HEAD:https://blog.csdn.net/luoshabugui/article/details/85256509     //这几个head讲解得很好

HEAD、master 与 branch: //对于HEAD和分支的解释很详细:https://www.jianshu.com/p/4219b6f62ce3

git fetch、git pull和FETCH_HEAD:https://www.cnblogs.com/Venom/p/5477367.html

======================================================================

git merge :

假设你当前所处的分支是master分支;

输入 git merge branch1      //表示的是将branch1合并进当前的master分支。实际上就是把branch1的记录加到master分支上了;是的这个master吸收了branch1分支的commit;

不过要注意的是此时对于branch1可没有什么影响,branch1没有任何改变,改变的是当前分支master;

merge的话就有可能产生merge冲突;

merge冲突后续将会结合一些场景进行分析,这样理解更加深刻;当然这里讲得内容理解后,再去分析merge冲突就好理解得多了,同时也知道如何去解决merge冲突;

https://www.cnblogs.com/grooovvve/p/12897770.html

======================================================================

git pull:

git pull 的作用是拉取远程仓库的更新到本地;而且很多情况下如果远程和你本地修改了同一行内容,这就会导致pull失败,一般会提示merge冲突;

如果git pull 有指定某个远程分支的话,表示拉取远程分支的更新到本地;

例如:git pull origin master

git pull origin master实际上是分成两个部分:

  git fetch origin master

  git merge FETCH_HEAD

在理解了上面的介绍,实际上我们也就理解了git pull的本质就是先更新远程分支的commit记录,并更新FETCH_HEAD;

然后再将远程分支merge到当前分支上(就是*所指的分支);

所以一般来说建议不用git pull,而是采用两步走,养成好习惯先fetch,更新远程分支的commit记录

然后可以使用

git log origin/master //查看远程的提交记录,fetch的一大好处就是不改变本地仓库,就可以查看远程的修改情况;

git diff 命令 查看差异,具体怎么使用留到专门的讲git diff的文章中来讨论;反正通过git diff可以查看差异,提前发现有没有可能存在merge冲突;

检查无误了之后再输入 git merge FETCH_HEAD,就可以把远程分支合并进当前分支;

相比起来,git fetch更安全也更符合实际要求,因为可以在merge前,可以查看更新情况,根据实际情况再决定是否合并。

fetch+merge与pull效果一样。但是要多用fetch+merge,这样可以检查fetch下来的更新是否合适。

pull直接包含了这两步操作,如果你觉得网上的更新没有问题,那直接pull也是可以的。

========================================================================

猜你喜欢

转载自www.cnblogs.com/grooovvve/p/12898243.html