“git pull”和”git fetch”有什么区别?

What is the difference between 'git pull' and 'git fetch'?

Moderator Note: Given that this question has already had sixty-seven answers posted to it (some of them deleted), consider whether or not you are contributing anything new before posting another one.

git pullgit fetch有什么区别?


简中的条款,通过git fetchgit pull是否git merge之后。

你可以在任何时间的更新你的git fetch分行根据refs/remotes//远程跟踪。

这个操作不会改变任何地方根据自己的refs/heads分支,是安全的,没有改变你的工作副本。我有一个定期的人甚至听git fetchcron作业运行在背景中(虽然我也不会建议这样做)。

这就是你做的git pull带到当地的分公司的最新版本,同时它还具有远程更新,远程跟踪你的其他分支。

拉:没有GIT GIT

In its default mode, git pull is shorthand for git fetch followed by git merge FETCH_HEAD.


  • 当你使用pull,Git自动tries你到你的工作。这是一个上下文敏感的操作系统中,邮件合并,将你拉入分公司目前的工作。pull自动提交你的评论merges没有让他们先。如果你不仔细,你可以运行你的部门管理,对频繁的冲突。

  • 当你fetchGit不从任何承诺,不存在目标的分公司,分公司和专卖店。目前在你的在你的本地库。然而,它不与你的分支合并他们的电流。这是特别有用的,如果你需要保持你的库是最新的东西,但是工作可能中断,如果你更新你的文件。集成到你的邮件到你的主分支,merge使用。


将Git的设计理念与更传统的源代码控制工具(如SVN)的设计理念进行对比是非常重要的。

Subversion是用客户机/服务器模型设计和构建的。有一个存储库就是服务器,几个客户机可以从服务器获取代码,处理它,然后将其提交回服务器。假设客户机在需要执行操作时总是可以联系服务器。

Git的设计是为了支持更分布式的模型,而不需要中央存储库(不过,如果愿意的话,当然可以使用中央存储库)。此外,Git的设计使客户机和"服务器"不需要同时联机。Git的设计是为了让不可靠链接上的人甚至可以通过电子邮件交换代码。可以完全断开连接工作,并通过Git烧录CD以交换代码。

为了支持这个模型,Git使用您的代码维护一个本地存储库,同时还维护一个反映远程存储库状态的附加本地存储库。通过在本地保存远程存储库的副本,Git可以计算出所需的更改,即使在远程存储库无法访问时也是如此。稍后,当您需要将更改发送给其他人时,Git可以将它们作为一组更改从远程存储库已知的时间点传输。

  • git fetch是一个命令,它说"将远程存储库的本地副本更新"。

  • git pull说:"把远程存储库中的更改带到我保存自己代码的地方。"

通常情况下,git pull通过执行git fetch来更新远程存储库的本地副本,然后将更改合并到您自己的代码存储库中,可能还包括您的工作副本。

需要注意的是,在您的工作站上通常至少有一个项目的三个副本。一个副本是您自己的具有自己提交历史记录的存储库。第二个副本是正在编辑和构建的工作副本。第三个副本是远程存储库的本地"缓存"副本。


以下是奥利弗·斯蒂尔对这一切的看法:

enter image description here

如果有足够的兴趣,我想我可以更新图像添加git clonegit merge


一个使用的情况下git fetch会告诉你那是下面的任何变化,因为你的最后一支远程拉……你可以做的是检查在一个变化的电流拉,可以在你的工作和公司文件的当前副本。

1
2
git fetch
git diff ...origin


它的成本我一点点的了解什么是差分的,但是这是一个简单的解释。在你的本地master是一家分公司。

当你取你的克隆库的整个库到你的本地主机。这意味着你有一个团队在这HEAD始发/到主主指针到该HEAD和指责。

当你开始你的工作和提前提交到主指针HEAD+你的邮件。但起源/主指针仍然是什么当你指责,这是检测。

方法:将操作系统的

  • 如果你的git fetch它将所有的变化就从远程库GitHub)和始发/到移动主机的HEAD指针。同时,当地的分公司主要指责它保持对蛛网膜下腔出血。
  • 如果你的git pullfetch(基本的,它将传统的解释说,任何新的变化)和合并到你的主分支和移动到HEAD的指针。


有时候,视觉表现有帮助。

enter image description here


简要

git fetch是类似于pull但不合并。它fetches IU(refs远程更新和本地objects)但你保持相同的(IU origin/master得到更新,但master停留一样)。

git pull拉着更多关于唐氏从远程。

更多

git clone克隆A回购。

从你创造的东西git rebase流分支是不是在一个临时区域的上游分支。你的公司现在是一样的。在你开始你的变化。因此,要改变在远程git pull -rebase下拉你的本地分行,倒带回放您的变化,在顶端的一个分支的电流通过,直到你是最新的。

所以,你想git branch -a节目到底发生了什么在您的所有本地和远程分支。

本博客是有用的:

之间的差异和GIT GIT git fetch拉,克隆(Mike Pearce和Git垫底)

git pull和封面,git fetchgit clonegit rebase

====

更新

我想我更新这显示你这是在实践中使用的。

  • 更新你的本地和远程的回购(但不合并):

    1
    git fetch
  • 下载后的更新,让我们看到的差异:

    1
    git diff master origin/master
  • 如果你高兴这些更新,然后合并:

    1
    git pull
  • 说明:

    步骤2:在更多的差异之间的本地和远程对海:如何比较本地和远程分支Git分支它吗?

    在步骤3:它可能是更准确的(例如在一个几乎将回购)做一git rebase origin这里。在另一个湖@贾斯汀欧姆,我回答。

    参见:http://longair.net /博客/ 2009/04/16/git fetch和合并/


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    git-pull - Fetch from and merge with another repository or a local branch
    SYNOPSIS

    git pull   …
    DESCRIPTION

    Runs git-fetch with the given parameters, and calls git-merge to merge the
    retrieved head(s) into the current branch. With --rebase, calls git-rebase
    instead of git-merge.

    Note that you can use . (current directory) as the <repository> to pull
    from the local repository — this is useful when merging local branches
    into the current branch.

    Also note that options meant for git-pull itself and underlying git-merge
    must be given before the options meant for git-fetch.

    如果你想你会拉你的合并D取历史,如果你只是想codez的一些人已被定位在附近的一些用品。


    你可以读取从远程仓库,看到的差异,然后拉或合并。

    这是一个例子是所谓的origin远程仓库和分公司(分公司:master跟踪远程origin/master

    1
    2
    3
    4
    git checkout master                                                  
    git fetch                                        
    git diff origin/master
    git rebase origin master


    短期和简单的答案是,只要是由git mergegit fetchgit pull之后。

    它是非常重要的注意,将自动合并git pull是否你喜欢它或不。这可能,当然,导致合并冲突。Let’s说你和你的公司是一origin远程master。如果你git diff origin/master之前你应该有一些想法的吸引,美国潜在的合并冲突,可以准备相应的当地分公司。

    此外,工作流程和涉及的一些推拉,git rebase,如这一个,这一条从paraphrase联:

    1
    2
    3
    4
    git pull origin master
    git checkout foo-branch
    git rebase master
    git push origin foo-branch

    如果你发现自己在这种情况下,你可能会tempted git pull --rebase)。除非你真的,真的知道什么是你做的,我会对那个建议。这一页是从man警告:git-pull中文版,2.3.5

    This is a potentially dangerous mode of operation. It rewrites
    history, which does not bode well when you published that history
    already. Do not use this option unless you have read git-rebase(1)
    carefully.


    好的,这里有一些关于git pullgit fetch的信息,所以你可以理解实际的区别…简单来说,fetch获取最新的数据,但不会更改代码,也不会干扰当前的本地分支代码,但pull获取代码更改并将其合并到本地分支,请继续阅读以获取有关每个代码的详细信息:

    吉特取出

    它将把所有引用和对象以及任何新的分支下载到本地存储库…

    Fetch branches and/or tags (collectively,"refs") from one or more
    other repositories, along with the objects necessary to complete their
    histories. Remote-tracking branches are updated (see the description
    of below for ways to control this behavior).

    By default, any tag that points into the histories being fetched is
    also fetched; the effect is to fetch tags that point at branches that
    you are interested in. This default behavior can be changed by using
    the --tags or --no-tags options or by configuring
    remote..tagOpt. By using a refspec that fetches tags explicitly,
    you can fetch tags that do not point into branches you are interested
    in as well.

    git fetch can fetch from either a single named repository or URL, or
    from several repositories at once if is given and there is a
    remotes. entry in the configuration file. (See git-config1).

    When no remote is specified, by default the origin remote will be
    used, unless there’s an upstream branch configured for the current
    branch.

    The names of refs that are fetched, together with the object names
    they point at, are written to .git/FETCH_HEAD. This information may be
    used by scripts or other git commands, such as git-pull.

    GIT拉力

    它将把从远程更改应用到本地的当前分支…

    Incorporates changes from a remote repository into the current branch.
    In its default mode, git pull is shorthand for git fetch followed by
    git merge FETCH_HEAD.

    More precisely, git pull runs git fetch with the given parameters and
    calls git merge to merge the retrieved branch heads into the current
    branch. With --rebase, it runs git rebase instead of git merge.

    should be the name of a remote repository as passed to
    git-fetch1. can name an arbitrary remote ref (for example,
    the name of a tag) or even a collection of refs with corresponding
    remote-tracking branches (e.g., refs/heads/:refs/remotes/origin/),
    but usually it is the name of a branch in the remote repository.

    Default values for and are read from the
    "remote" and"merge" configuration for the current branch as set by
    git-branch --track.

    我还创建了下面的视频,向您展示了git fetchgit pull是如何一起工作的…

    git pull and git fetch


    enter image description here

    这种交互式图形表示对于理解git非常有用:http://ndpsoftware.com/git-craitsheet.html

    git fetch只是"下载"从远程到本地存储库的更改。git pull下载更改并将其合并到当前分支中。"在默认模式下,git pullgit fetch的简写,后跟git merge FETCH_HEAD


    奖金:

    说到拉取上面的答案,我想分享一个有趣的技巧,

    git pull --rebase

    上面的命令是我Git生活中最有用的命令,它节省了很多时间。

    在将新提交推送到服务器之前,请尝试此命令,它将自动同步最新的服务器更改(使用fetch+merge),并将提交放在Git日志的顶部。无需担心手动拉/合并。

    详情请访问:http://gitolite.com/git-pull--rebase


    我喜欢有一些直观的情况表示来掌握这些事情。也许其他开发人员也希望看到它,所以这里是我的补充。我不完全确定这一切是否正确,所以如果你发现任何错误,请发表评论。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
                                             LOCAL SYSTEM
                      . =====================================================    
    ================= . =================  ===================  =============
    REMOTE REPOSITORY . REMOTE REPOSITORY  LOCAL REPOSITORY     WORKING COPY
    (ORIGIN)          . (CACHED)          
    for example,      . mirror of the      
    a github repo.    . remote repo
    Can also be       .
    multiple repo's   .
                      .
                      .
    FETCH  *------------------>*
    Your local cache of the remote is updated with the origin (or multiple
    external sources, that is git's distributed nature)
                      .
    PULL   *-------------------------------------------------------->*
    changes are merged directly into your local copy. when conflicts occur,
    you are asked for decisions.
                      .
    COMMIT            .                             *<---------------*
    When coming from, for example, subversion, you might think that a commit
    will update the origin. In git, a commit is only done to your local repo.
                      .
    PUSH   *<---------------------------------------*
    Synchronizes your changes back into the origin.

    具有遥控器的提取镜像的一些主要优势是:

    • 性能(滚动浏览所有提交和消息,而不尝试通过网络挤压它)
    • 关于您的本地repo状态的反馈(例如,我使用Atlassian的sourcetree,它将给我一个灯泡,指示与源站相比,我是提前提交还是落后提交。这些信息可以用git fetch更新)。


    我也曾为此挣扎过。事实上,我在谷歌上搜索了同样的问题。阅读所有这些答案最终在我的脑海中画出了一幅图片,我决定试着让这幅图片下来看看2个存储库和1个沙盒的状态以及随着时间的推移所执行的操作,同时观察它们的版本。这就是我的想法。如果我搞砸了,请纠正我。

    三个带回程的回购:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    ---------------------     -----------------------     -----------------------
    - Remote Repo       -     - Remote Repo         -     - Remote Repo         -
    -                   -     - gets pushed         -     -                     -
    - @ R01             -     - @ R02               -     - @ R02               -
    ---------------------     -----------------------     -----------------------

    ---------------------     -----------------------     -----------------------
    - Local Repo        -     - Local Repo          -     - Local Repo          -
    - pull              -     -                     -     - fetch               -
    - @ R01             -     - @ R01               -     - @ R02               -
    ---------------------     -----------------------     -----------------------

    ---------------------     -----------------------     -----------------------
    - Local Sandbox     -     - Local Sandbox       -     - Local Sandbox       -
    - Checkout          -     - new work done       -     -                     -
    - @ R01             -     - @ R01+              -     - @R01+               -
    ---------------------     -----------------------     -----------------------

    一拉三下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    ---------------------     -----------------------     -----------------------
    - Remote Repo       -     - Remote Repo         -     - Remote Repo         -
    -                   -     - gets pushed         -     -                     -
    - @ R01             -     - @ R02               -     - @ R02               -
    ---------------------     -----------------------     -----------------------

    ---------------------     -----------------------     -----------------------
    - Local Repo        -     - Local Repo          -     - Local Repo          -
    - pull              -     -                     -     - pull                -
    - @ R01             -     - @ R01               -     - @ R02               -
    ---------------------     -----------------------     -----------------------

    ---------------------     -----------------------     -----------------------
    - Local Sandbox     -     - Local Sandbox       -     - Local Sandbox       -
    - Checkout          -     - new work done       -     - merged with R02     -
    - @ R01             -     - @ R01+              -     - @R02+               -
    ---------------------     -----------------------     -----------------------

    这帮助我理解了为什么取货很重要。


    Git Fetch和Git Pull之间的区别可以用以下场景来解释:(记住,图片比文字更响亮!,我提供了图示)

    让我们举一个例子,您正与您的团队成员一起处理一个项目。因此,它们将是项目的一个主要分支,所有贡献者必须将其分叉到自己的本地存储库,然后在此本地分支上工作,以修改/添加模块,然后推回到主分支。

    所以,当您在本地存储库中分叉主项目时,两个分支的初始状态如下:(ABC是项目已完成的模块)

    enter image description here

    现在,您已经开始开发新的模块(假设D),当您完成了D模块后,您希望将其推到主分支,但同时发生的情况是,您的一个队友开发了新的模块EF和修改的C。因此,现在发生的情况是,您的本地存储库落后于项目的原始进度,因此将您的更改推送到主分支可能会导致冲突,并可能导致您的模块D发生故障。

    enter image description here

    为了避免此类问题并与项目的原始进度同步工作,有两种方法:

    1。Git Fetch-这将下载对源站/主分支项目所做的所有更改,这些更改不在您的本地分支中。并等待git merge命令应用已提取到存储库或分支的更改。

    enter image description here

    因此,现在您可以在将文件合并到存储库之前仔细监视这些文件。如果因为修改了C而需要修改,也可以修改D

    enter image description here

    2。git pull-这将使用原始分支/主分支更新您的本地分支,即实际上它所做的是git fetch和git合并的组合。但这可能会导致冲突发生,因此建议将git pull与干净的副本一起使用。

    enter image description here


    我们简单地说:

    1
    git pull == git fetch + git merge

    如果运行git pull,则不需要将数据合并到本地。如果运行git fetch,则意味着您必须运行git merge才能将最新的代码获取到本地计算机。否则,如果不合并,则不会更改本地计算机代码。

    因此,在Git图形用户界面中,当您执行提取时,必须合并数据。fetch本身不会在本地进行代码更改。您可以在更新代码时通过获取一旦获取并看到,代码就不会改变。然后合并…您将看到更改的代码。


    git fetch拉下来的代码从远程服务器到您的跟踪分支在你的本地库。如果你是origin远程命名管道(默认),然后将在论文origin/分支,例如origin/masterorigin/mybranch-123等困境,这是他们在您的本地副本电流的分支,这些分支从服务器。

    然后做一git pullgit fetch所以更多关于酒店的代码跟踪到您的本地版本的分支,分支电流。如果你不准备,没有变化,只是git fetch第一。


    git fetch将检索远程分支,以便您可以使用当前分支来检索git diffgit merge分支。git pull将在当前分支跟踪的远程分支上运行fetch,然后合并结果。您可以使用git fetch查看远程分支是否有任何更新,而无需将它们与本地分支合并。


    吉特取出

    您可以通过fetch从源站下载对本地分支的更改。fetch向远程回购请求其他人所做的所有承诺,但您没有本地回购。fetch下载这些提交并将其添加到本地存储库。

    Git合并

    可以使用合并命令应用通过fetch下载的更改。合并将获取从fetch检索到的提交,并尝试将其添加到本地分支。合并将保留本地更改的提交历史记录,这样当您与push共享分支时,git将知道其他人如何合并您的更改。

    GIT拉力

    fetch和merge经常一起运行,因此创建了一个将两者结合在一起的命令pull。pull执行一个fetch,然后进行合并,将下载的提交添加到本地分支中。


    之间的差异和git fetchgit pull唯一的是:

    git pull拉从一个远程分支和更多关于它。

    git fetch只读fetches从远程分支,但它不合并

    git fetch +拉= IU GIT GIT合并……


    Git允许旧的应用chronologically提交后提交的更新。这是因为,法案提交到库之间的转移是分两个步骤:

  • 复制到新的提交从远程复制本支部支部内部局域网远程回购。

    (一master@remote >> remote/origin/master@local回购回购操作)

  • 整合新的提交到本地分行

    (remote/origin/master@local >> master@local内回购操作)

  • 有两个方式做降压2。你可以:

  • 本地分行后叉负荷普通的祖先和添加新的提交,提交,这是平行的一个独有的本地知识库,在合并结束后提交finalized,叉。
  • 负载后插入新的提交,提交普通的祖先和reapply独有的本地库。
  • git术语1,2是git fetch降压,降压或git rebasegit merge

    git pullgit fetchgit merge


    What is the difference between git pull and git fetch?

    要理解这一点,首先需要了解本地Git不仅维护本地存储库,而且还维护远程存储库的本地副本。

    git fetch使远程存储库的本地副本成为最新版本。例如,如果您的远程存储库是github,那么您可能需要将远程存储库中所做的任何更改提取到远程存储库的本地副本中。这将允许您执行比较或合并等操作。

    另一方面,git pull会将远程存储库中的更改记录到保存自己代码的位置。通常,git pull将首先执行git fetch以使远程存储库的本地副本最新,然后它将更改合并到您自己的代码存储库中,并可能合并到您的工作副本中。


    Git使用两个命令从远程到本地获取最新版本的分支:

  • git fetch:git将从远程获取最新版本到本地,但不会自动合并。&(b)git fetch origin mastergit log -p master..origin/mastergit merge origin/master

    &上述命令意味着从远程到源站主分支下载主分支的最新版本。然后比较本地主分支和源主分支。最后,合并。

  • git pull:git将从远程获取最新版本并合并到本地。

    &(b)git pull origin master

    &上面的命令相当于git fetchgit merge。实际上,git fetch可能更安全,因为在合并之前,我们可以看到更改并决定是否合并。


  • Git拉=(git fetch + git merge)

    git fetch不改变本地分支。

    如果你已经有一个本地存储一个远程设置为所需的项目,你可以标记的坟墓所有分支和远程使用现有的git fetch。……不做任何改变读取本地的分支,所以你将需要一个远程分支合并到本地分行提取配对伴侣新的变化。在GitHub


    实际上,Git维护了您自己的代码的副本,并且远程存储库。

    命令git fetch通过从远程存储库获取数据使本地副本成为最新版本。我们之所以需要这样做,是因为其他人可能对代码做了一些更改,而您希望自己保持更新。

    命令git pull将远程存储库中的更改带到保存自己代码的地方。通常情况下,git pull会先执行"git fetch"以使远程存储库的本地副本最新,然后将更改合并到您自己的代码存储库中,可能还会合并到您的工作副本中。


    试着变得清晰和简单。

    根据您的配置,git pull命令实际上是用于git fetch的shortcut,然后是git merge或git rebase命令。您可以配置Git存储库,使Git Pull是一个fetch,后面是一个rebase。


    初学者的简单图形表示,

    enter image description here

    在这里,

    1
    git pull

    将从存储库中提取代码并与本地的重新平衡…在Git Pull中,有可能创建新的提交。

    但在,

    吉特取出

    将从存储库中获取代码,我们需要使用git rebase手动重新调整代码的大小。

    我将从服务器主服务器获取数据,并在本地主服务器中对其进行重新设置。

    1)git pull(自动完成rebase):

    1
    git pull origin master

    这里是您的远程回购主是您的分支机构

    2)git fetch(需要手动重新平衡):

    1
    git fetch origin master

    它将从源站获取服务器更改。它将在你的本地,直到你自己重新平衡它。我们需要通过检查代码手动修复冲突。

    1
    git rebase origin/master

    这将使代码重新定位到本地。在那之前,确保你在正确的部门。


    1
    git pull = git fetch + git merge

    从pro-git§;2.5 git基础知识-使用遥控器:从遥控器获取和提取:

    It’s important to note that the fetch command pulls the data to your local repository — it doesn’t
    automatically merge it with any of your work or modify what you’re
    currently working on. You have to merge it manually into your work
    when you’re ready.

    If you have a branch set up to track a remote branch, you can use the
    git pull command to automatically fetch and then merge a remote
    branch into your current branch. This may be an easier or more
    comfortable workflow for you; and by default, the git clone command
    automatically sets up your local master branch to track the remote
    master branch on the server you cloned from (assuming the remote has a
    master branch). Running git pull generally fetches data from the
    server you originally cloned from and automatically tries to merge it
    into the code you’re currently working on.


    你必须记住吉特的本质。您有远程和本地分支(不一定相同)。与其他源代码管理系统相比,这可能有点令人费解。

    通常,当您签出远程文件时,会创建一个本地副本来跟踪远程文件。

    Git Fetch将使用远程分支并更新您的信息。

    事实上,如果其他SWE在同一个分支中工作,并且很少在小的一个开发—一个分支—一个项目场景中工作,情况就是这样的。

    你在当地分支机构的工作仍然完好无损。为了将更改带到本地分支,必须合并/重新设置远程分支的更改。

    git pull正好完成这两个步骤(即--重新调整为重新调整而不是合并)

    如果您的本地历史记录和远程历史记录有冲突,您将被迫在git push发布更改期间进行合并。

    因此,它实际上取决于您工作环境的性质和使用体验。


    GIT拉力

    它使用一个命令执行两个函数。

    它获取对远程分支所做的所有更改,然后将这些更改合并到本地分支中。您还可以通过传递来修改pull-by-passing的行为——rebase。这里可以读取merge和rebase之间的区别

    吉特取出

    git fetch只完成git pull的一半工作。它只会将远程更改引入本地repo,但不会将其应用到分支中。您必须显式应用这些更改。可以按如下方式进行:

    1
    2
    git fetch
    git rebase origin/master

    从Git备忘表:

    1
    2
    git fetch <remote> // Download all changes from <remote>, but don't integrate into HEAD
    git pull <remote> <branch> // Download changes and directly merge/integrate into HEAD


    据我所知,

    git pull-从指定的远程(由用户指定)下拉,并将其立即合并到我们当前所在的分支中。它基本上是fetch和merge命令的混合。

    Git Fetch-与Pull相同,但不会进行任何合并。所以在合并文件之前,您可以仔细地监视这些文件。

    这个URL必须有助于进一步理解:git pull、git fetch和git clone(以及git rebase)之间的区别。


    简而言之:

    git fetch:看看有没有新东西。

    以东十一〔十七〕把新东西放在你的东西上面。


    简单地说,如果你要跳上一架没有互联网的飞机……在起飞前,你只需跳上一架git fetch origin 。它将把所有的更改提取到您的计算机中,但是将其与您的本地开发/工作区分开。

    在飞机上,您可以对本地工作区进行更改,然后将其与您获取的内容合并,并在没有Internet的情况下解决潜在的合并冲突。除非有人对远程回购进行了新的冲突性更改,否则一旦您到达目的地,您将执行git push origin 并去喝咖啡。

    从这个令人敬畏的Attlasian教程:

    The git fetch command downloads commits, files, and refs from a
    remote repository into your local repo.

    Fetching is what you do when you want to see what everybody else has
    been working on. It’s similar to svn update in that it lets you see
    how the central history has progressed, but it doesn’t force you to
    actually merge the changes into your repository. Git isolates
    fetched content as a from existing local content, it has absolutely
    no effect on your local development work. Fetched content has to be explicitly checked out using the git checkout command. This makes
    fetching a safe way to review commits before integrating them with
    your local repository.

    When downloading content from a remote repo, git pull and git fetch commands are available to accomplish the task. You can consider
    git fetch the 'safe' version of the two commands. It will download
    the remote content but not update your local repo's working state,
    leaving your current work intact. git pull is the more aggressive
    alternative, it will download the remote content for the active local
    branch and immediately execute git merge to create a merge commit
    for the new remote content. If you have pending changes in progress
    this will cause conflicts and kickoff the merge conflict resolution
    flow.

    使用git pull时:

    • 你没有任何孤立。
    • 它会影响你当地的发展。
    • 它不需要显式签出。因为它隐式地做了一个git merge
    • 基本上不安全。很有侵略性。
    • git fetch不同,它只影响你的.git/refs/remotes,git pull会影响你的.git/refs/remotes.git/refs/heads/

    嗯……那么,如果我没有用git fetch更新工作副本,那么我在哪里进行更改?Git在哪里获取存储新提交?

    好问题。它把它放在与你的工作副本隔离的地方。但又在哪里呢?让我们来查一下。

    在您的项目目录中(即您在其中执行git命令)执行以下操作:

  • ls。这将显示文件和目录。没什么好的,我知道。

  • 现在做ls -a。这将显示DOT文件,即以.开头的文件,然后您将能够看到名为.git的目录。

  • cd .git。这显然会改变你的目录。
  • 现在是有趣的部分;做ls。您将看到目录列表。我们在找refs。做cd refs
  • 查看所有目录中的内容很有趣,但是让我们集中讨论其中的两个目录。headsremotes。也可以使用cd对其内部进行检查。
  • 您所做的任何git fetch都将更新/.git/refs/remotes目录中的项目。它不会更新/.git/refs/heads目录中的任何内容。
  • 任何git pull将首先执行git fetch,更新/.git/refs/remotes目录中的项目,然后与本地合并,然后更改/.git/refs/heads目录中的头。
  • 一个很好的相关答案也可以找到"git fetch"在哪里?

    还可以从git分支命名约定日志中查找"斜线符号"。


    我相信大多数答案都能很好地回答这个问题。我会强调何时使用它。

    Enter image description here

    当您需要获得其他开发人员的更新,但又希望无障碍地继续您的工作时,fetch可能很有用。经常想下线工作的人使用fetch获取最新更新,直到她/他在线。稍后,当她/他对她的更改感到满意时,将分支中的更改合并到他/她的工作区中。

    而那些在网上工作并且非常确定自己的变化并希望获得最新代码的人,以及那些直接使用pullmerge。我很少使用fetch,因为为了检查最新的更新,我通过github网站检查它们,并且我总是离线工作。正如我所提到的,您可能会使用上述场景。


    吉特取出

    帮助您了解git repository的最新更新。假设您在一个使用GitFlow的团队中工作,其中团队使用多个branches功能。使用git fetch --allcommand,您可以了解repository中的所有新branches

    大多数情况下,git fetchgit reset一起使用。例如,您希望将所有本地更改恢复到当前存储库状态。

    1
    2
    git fetch --all // get known about latest updates
    git reset --hard origin/[branch] // revert to current branch state

    GIT拉力

    此命令用当前的repositorybranch状态更新您的branch。让我们继续学习GitFlow。多功能branchesmergeddevelop的分支,当你想为项目开发新功能时,你必须去开发branch和做一个git pull以获得developbranch的当前状态。

    Documentation for GitFlow https://gist.github.com/peterdeweese/4251497


    git fetch将远程存储库的目录同步到本地。它不会将文件/代码从远程更改合并到本地分支。

    git pull下载与当前本地分支相关的更改,然后将其合并。