zoukankan      html  css  js  c++  java
  • git fetch & pull详解

    1、简单概括

    先用一张图来理一下git fetchgit pull的概念:

    可以简单的概括为:

    git fetch是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。

    git pull 则是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决。

    下面我们来详细了解一下git fetch 和git pull 的用法。 

    2、分支的概念

    在介绍两种方法之前,我们需要先了解一下分支的概念: 
    分支是用来标记特定代码的提交,每一个分支通过SHA1sum值来标识,所以对分支的操作是轻量级的,你改变的仅仅是SHA1sum值。

    如下图所示,当前有2个分支,A,C,E属于master分支,而A,B,D,F属于dev分支。

    A----C----E(master)
     
      B---D---F(dev)
    • 1
    • 2
    • 3

    它们的head指针分别指向E和F,对上述做如下操作:

    git checkout master  //选择or切换到master分支
    git merge dev        //将dev分支合并到当前分支(master)中
    • 1
    • 2

    合并完成后:

    A---C---E---G(master)
              /
      B---D---F(dev)
    • 1
    • 2
    • 3

    现在ABCDEFG属于master,G是一次合并后的结果,是将E和F的代码合并后的结果,可能会出现冲突。而ABDF依然属于dev分支。可以继续在dev的分支上进行开发:

    A---C---E---G---H(master)
              /
      B---D---F---I(dev)
    
    • 1
    • 2
    • 3
    • 4

    分支(branch)的基本操作:

    git branch //查看本地所有分支 
    
    git branch -r //查看远程所有分支
    
    git branch -a //查看本地和远程的所有分支
    
    git branch <branchname> //新建分支
    
    git branch -d <branchname> //删除本地分支
    
    git branch -d -r <branchname> //删除远程分支,删除后还需推送到服务器
    git push origin:<branchname>  //删除后推送至服务器
    
    git branch -m <oldbranch> <newbranch> //重命名本地分支
    /**
    *重命名远程分支:
    *1、删除远程待修改分支
    *2、push本地新分支到远程服务器
    */
    
    //git中一些选项解释:
    
    -d
    --delete:删除
    
    -D
    --delete --force的快捷键
    
    -f
    --force:强制
    
    -m
    --move:移动或重命名
    
    -M
    --move --force的快捷键
    
    -r
    --remote:远程
    
    -a
    --all:所有

    3、git fetch 用法

    git fetch 命令:

    $ git fetch <远程主机名> //这个命令将某个远程主机的更新全部取回本地
    • 1

    如果只想取回特定分支的更新,可以指定分支名:

    $ git fetch <远程主机名> <分支名> //注意之间有空格
    • 1

    最常见的命令如取回origin 主机的master 分支:

    $ git fetch origin master
    • 1

    取回更新后,会返回一个FETCH_HEAD ,指的是某个branch在服务器上的最新状态,我们可以在本地通过它查看刚取回的更新信息:

    $ git log -p FETCH_HEAD
    • 1

    如图: 

    可以看到返回的信息包括更新的文件名,更新的作者和时间,以及更新的代码(19行红色[删除]和绿色[新增]部分)。

    我们可以通过这些信息来判断是否产生冲突,以确定是否将更新merge到当前分支。 

    4、git pull 用法

    前面提到,git pull 的过程可以理解为:

    git fetch origin master //从远程主机的master分支拉取最新内容 
    git merge FETCH_HEAD    //将拉取下来的最新内容合并到当前所在的分支中
    • 1
    • 2

    即将远程主机的某个分支的更新取回,并与本地指定的分支合并,完整格式可表示为:

    $ git pull <远程主机名> <远程分支名>:<本地分支名>
    • 1

    如果远程分支是与当前分支合并,则冒号后面的部分可以省略:

    $ git pull origin next
  • 相关阅读:
    Linux编程 22 shell编程(输出和输入重定向,管道,数学运算命令,退出脚本状态码)
    mysql 开发进阶篇系列 46 物理备份与恢复( xtrabackup的 选项说明,增加备份用户,完全备份案例)
    mysql 开发进阶篇系列 45 物理备份与恢复(xtrabackup 安装,用户权限,配置)
    mysql 开发进阶篇系列 44 物理备份与恢复( 热备份xtrabackup 工具介绍)
    Linux编程 21 shell编程(环境变量,用户变量,命令替换)
    Linux编程 20 shell编程(shell脚本创建,echo显示信息)
    mysql 开发进阶篇系列 43 逻辑备份与恢复(mysqldump 的基于时间和位置的不完全恢复)
    Linux编程 19 编辑器(vim 用法)
    (网页)angularjs中的interval定时执行功能(转)
    (网页)在SQL Server中为什么不建议使用Not In子查询(转)
  • 原文地址:https://www.cnblogs.com/runnerjack/p/9342362.html
Copyright © 2011-2022 走看看