• Git命令_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也是可以的。

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

  • 相关阅读:
    获取Web打印的实际打印次数
    Web打印的在线设计
    上海交易所的STEP/FIX/FAST协议解析
    回忆我的姑妈
    指定Web打印的打印机
    Web打印控件设计
    最终用户在线设计和修改Web报表
    NOIP2021 游记
    gym103427 部分题解
    gym103428 部分题解
  • 原文地址:https://www.cnblogs.com/grooovvve/p/12898243.html
Copyright © 2020-2023  润新知