zoukankan      html  css  js  c++  java
  • git clone、git pull和git fetch的区别

    基本用法

    git clone 

    git clone 是将其他仓库克隆到本地,包括被 clone 仓库的版本变化,因此本地无需是一个仓库,且克隆将设置额外的远程跟踪分支。因为是克隆来的,所以 .git 文件夹里存放着与远程仓库一模一样的版本库记录,clone 操作是一个从无到有的克隆操作。

    基本用法:

    $ git clone <版本库的URL> [本地目录名]

    如果不指定本地目录,则会在本地生成一个远程仓库同名的目录。

    git pull

    git pull 是拉取远程分支更新到本地仓库再与本地分支进行合并,即:git pull = git fetch + git merge

    基本用法:

    $ git pull <远程主机名> [远程分支名]:[本地分支名]

    如果不指定远程分支名和本地分支名,则会将远程 master 分支拉取下来和本地的当前分支合并。

    git fetch

    理解 fetch 的关键, 是理解 FETCH_HEAD,FETCH_HEAD 指的是:某个 branch 在服务器上的最新状态。这个列表保存在 .git/FETCH_HEAD 文件中,其中每一行对应于远程服务器的一个分支。
    当前分支指向的 FETCH_HEAD,就是这个文件第一行对应的那个分支。一般来说,存在两种情况:

    • 如果没有显式的指定远程分支,则远程分支的 master 将作为默认的 FETCH_HEAD
    • 如果指定了远程分支,就将这个远程分支作为 FETCH_HEAD

    git fetch 更新本地仓库的两种用法:

    # 方法一
    $ git fetch origin master                #从远程的origin仓库的master分支下载代码到本地的origin master
    $ git log -p master.. origin/master      #比较本地的仓库和远程参考的区别
    $ git merge origin/master                #把远程下载下来的代码合并到本地仓库,远程的和本地的合并
    # 方法二
    $ git fetch origin master:temp           #从远程的origin仓库的master分支下载到本地并新建一个分支temp
    $ git diff temp                          #比较master分支和temp分支的不同
    $ git merge temp                         #合并temp分支到master分支
    $ git branch -d temp                     #删除temp

    区别

    1. 是否需要本地初始化仓库

    git clone 不需要,git pull 和 git fetch 需要。

    2. 是否可以指定分支推送到远程

    git clone下来的项目可以直接推送到远程,git pull 和 git fetch 需要先执行 git remote add 添加远程仓库后才能 push。

    From

    https://segmentfault.com/a/1190000017030384

    https://www.jianshu.com/p/c6a0397ec6f5

  • 相关阅读:
    Vue3源码系列之触发更新的实现
    Vue3源码系列之依赖收集的实现
    Vue3源码系列之reactiveApi实现
    删除链表的倒数第n个节点
    Shared_ptr 参考实现
    linux 目录结构 比较老
    C++11 bind function
    状态机DP
    尾递归
    秒杀系统的构建(2)
  • 原文地址:https://www.cnblogs.com/tangxuliang/p/11950995.html
Copyright © 2011-2022 走看看