zoukankan      html  css  js  c++  java
  • 【git | 10】git fetch系列

    git fetch

    一旦远程主机的版本库有了更新(Git术语叫做commit),需要将这些更新取回本地,这时就要用到git fetch命令;

    1. 将某个远程主机的更新全部取回本地, git fetch 命令通常查看其他人的进程,因为取回的代码对你本地的分支开发代码没有应影响。

    git fetch <远程主机名>

    2. 取回特定分支的更新, 使用命令:

    $ git fetch <远程主机名> <分支名>

     例如,取回origin主机的master分支,如下:

    $ git fetch origin master

    注意:取回的更新,在本地主机上要用"远程主机名/分支名"的形式读取。比如origin主机的master,就要用origin/master读取;

    3. 代码合并:

    ## 在本地新建一个temp分支,并将远程origin仓库的master分支代码下载到本地temp分支;
    $ git fetch origin master:temp
    
    ## 比较本地代码与刚刚从远程下载下来的代码的区别;
    $ git diff temp
    
    ## 合并temp分支到本地的master分支;
    $ git merge temp
    
    ## 如果不想保留temp分支,删除;
    $ git branch -d temp

    图解剖析

    Git 的 clone 命令会为你自动将远程主机命名为 origin,拉取它的所有数据,创建一个指向它的 master 分支的指针,并且在本地将其命名为 origin/master。同时Git 也会给你一个与 origin 的master 分支在指向同一个地方的本地 master 分支,这样你就有工作的基础。

    本地有提交,远程也有别人的推送

    1. 远程库有人推送,提交了C0和C1:

     2. 本地提交了D0和D1:

    只要你不与 origin 服务器连接,你的 origin/master 指针就不会移动。

     3. 同步

    如果要同步远程库到你的工作,运行命令:

    $ git fetch origin

    注意:这个命令查找 “origin” 是哪一个服务器,从中抓取本地没有的数据,并且更新本地数据库,移动 origin/master 指针指向新的、更新后的位置。

     要特别注意的一点是 fetch 抓取到新的远程跟踪分支时,本地的工作区(workspace)不会自动生成一份可编辑的副本,抓取结果是直接送到版本库(Repository)中。

    如下图:

     

    打个比方,在远程库 origin 新建了一个分支 dev,git fetch 后本地不会生成一个新的分支 dev(可用 git branch 查看),只有一个不可以修改的 origin/dev 指针。

    在 origin/master 后继续工作

    如果想要在 origin/master 分支上工作,可以新建分支 test 并将其建立在远程跟踪分支之上:

    $ git checkout -b test origin/master

    这会给你新建一个用于工作的本地分支 test,并且起点位于 origin/master。

    合并

    如果想把拉取的结果合并到本地分支,需要手动合并。使用如下命令:

    $ git chekout master
    $ git merge origin/master

    然而,看到上面的合并结果会想到命令 git pull 。在大多数情况下它的含义是一个 git fetch 紧接着一个 git merge 命令。即 git pull 是 git fetch 和 git merge 的两步的和。

    但是由于 git pull 的使用经常令人困惑,所以通常单独显式地使用 fetch 与 merge 命令会更好一些。

    参考资料

    1. Git:远程分支----git fetch命令的使用

    2. git fetch命令的使用

  • 相关阅读:
    快速幂模板
    部分有关素数的题
    POJ 3624 Charm Bracelet (01背包)
    51Nod 1085 背包问题 (01背包)
    POJ 1789 Truck History (Kruskal 最小生成树)
    HDU 1996 汉诺塔VI
    HDU 2511 汉诺塔X
    HDU 2175 汉诺塔IX (递推)
    HDU 2077 汉诺塔IV (递推)
    HDU 2064 汉诺塔III (递推)
  • 原文地址:https://www.cnblogs.com/sunbines/p/14915765.html
Copyright © 2011-2022 走看看