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 GIT
In its default mode,
git pull is shorthand forgit fetch followed bygit merge FETCH_HEAD .
-
当你使用
pull ,Git自动tries你到你的工作。这是一个上下文敏感的操作系统中,邮件合并,将你拉入分公司目前的工作。pull 自动提交你的评论merges没有让他们先。如果你不仔细,你可以运行你的部门管理,对频繁的冲突。 -
当你
fetch Git不从任何承诺,不存在目标的分公司,分公司和专卖店。目前在你的在你的本地库。然而,它不与你的分支合并他们的电流。这是特别有用的,如果你需要保持你的库是最新的东西,但是工作可能中断,如果你更新你的文件。集成到你的邮件到你的主分支,merge 使用。
将Git的设计理念与更传统的源代码控制工具(如SVN)的设计理念进行对比是非常重要的。
Subversion是用客户机/服务器模型设计和构建的。有一个存储库就是服务器,几个客户机可以从服务器获取代码,处理它,然后将其提交回服务器。假设客户机在需要执行操作时总是可以联系服务器。
Git的设计是为了支持更分布式的模型,而不需要中央存储库(不过,如果愿意的话,当然可以使用中央存储库)。此外,Git的设计使客户机和"服务器"不需要同时联机。Git的设计是为了让不可靠链接上的人甚至可以通过电子邮件交换代码。可以完全断开连接工作,并通过Git烧录CD以交换代码。
为了支持这个模型,Git使用您的代码维护一个本地存储库,同时还维护一个反映远程存储库状态的附加本地存储库。通过在本地保存远程存储库的副本,Git可以计算出所需的更改,即使在远程存储库无法访问时也是如此。稍后,当您需要将更改发送给其他人时,Git可以将它们作为一组更改从远程存储库已知的时间点传输。
git fetch 是一个命令,它说"将远程存储库的本地副本更新"。git pull 说:"把远程存储库中的更改带到我保存自己代码的地方。"
通常情况下,
需要注意的是,在您的工作站上通常至少有一个项目的三个副本。一个副本是您自己的具有自己提交历史记录的存储库。第二个副本是正在编辑和构建的工作副本。第三个副本是远程存储库的本地"缓存"副本。
以下是奥利弗·斯蒂尔对这一切的看法:
如果有足够的兴趣,我想我可以更新图像添加
一个使用的情况下
1 2 | git fetch git diff ...origin |
它的成本我一点点的了解什么是差分的,但是这是一个简单的解释。在你的本地
当你取你的克隆库的整个库到你的本地主机。这意味着你有一个团队在这
当你开始你的工作和提前提交到主指针
方法:将操作系统的
- 如果你的
git fetch 它将所有的变化就从远程库GitHub)和始发/到移动主机的HEAD 指针。同时,当地的分公司主要指责它保持对蛛网膜下腔出血。 - 如果你的
git pull fetch(基本的,它将传统的解释说,任何新的变化)和合并到你的主分支和移动到HEAD 的指针。
有时候,视觉表现有帮助。
简要
更多
从你创造的东西
所以,你想
本博客是有用的:
之间的差异和GIT GIT git fetch拉,克隆(Mike Pearce和Git垫底)
====
更新
我想我更新这显示你这是在实践中使用的。
更新你的本地和远程的回购(但不合并):
1 | git fetch |
下载后的更新,让我们看到的差异:
1 | git diff master origin/master |
如果你高兴这些更新,然后合并:
1 | git pull |
说明:
步骤2:在更多的差异之间的本地和远程对海:如何比较本地和远程分支Git分支它吗?
在步骤3:它可能是更准确的(例如在一个几乎将回购)做一
参见: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的一些人已被定位在附近的一些用品。
你可以读取从远程仓库,看到的差异,然后拉或合并。
这是一个例子是所谓的
1 2 3 4 | git checkout master git fetch git diff origin/master git rebase origin master |
短期和简单的答案是,只要是由
它是非常重要的注意,将自动合并
此外,工作流程和涉及的一些推拉,
1 2 3 4 | git pull origin master git checkout foo-branch git rebase master git push origin foo-branch |
如果你发现自己在这种情况下,你可能会tempted
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.
好的,这里有一些关于
它将把所有引用和对象以及任何新的分支下载到本地存储库…
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非常有用:http://ndpsoftware.com/git-craitsheet.html
奖金:
说到拉取上面的答案,我想分享一个有趣的技巧,
上面的命令是我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之间的区别可以用以下场景来解释:(记住,图片比文字更响亮!,我提供了图示)
让我们举一个例子,您正与您的团队成员一起处理一个项目。因此,它们将是项目的一个主要分支,所有贡献者必须将其分叉到自己的本地存储库,然后在此本地分支上工作,以修改/添加模块,然后推回到主分支。
所以,当您在本地存储库中分叉主项目时,两个分支的初始状态如下:(
现在,您已经开始开发新的模块(假设
为了避免此类问题并与项目的原始进度同步工作,有两种方法:
1。Git Fetch-这将下载对源站/主分支项目所做的所有更改,这些更改不在您的本地分支中。并等待git merge命令应用已提取到存储库或分支的更改。
因此,现在您可以在将文件合并到存储库之前仔细监视这些文件。如果因为修改了
2。git pull-这将使用原始分支/主分支更新您的本地分支,即实际上它所做的是git fetch和git合并的组合。但这可能会导致冲突发生,因此建议将git pull与干净的副本一起使用。
我们简单地说:
1 | git pull == git fetch + git merge |
如果运行
因此,在Git图形用户界面中,当您执行提取时,必须合并数据。fetch本身不会在本地进行代码更改。您可以在更新代码时通过获取一旦获取并看到,代码就不会改变。然后合并…您将看到更改的代码。
然后做一
吉特取出
您可以通过fetch从源站下载对本地分支的更改。fetch向远程回购请求其他人所做的所有承诺,但您没有本地回购。fetch下载这些提交并将其添加到本地存储库。
Git合并
可以使用合并命令应用通过fetch下载的更改。合并将获取从fetch检索到的提交,并尝试将其添加到本地分支。合并将保留本地更改的提交历史记录,这样当您与push共享分支时,git将知道其他人如何合并您的更改。
GIT拉力
fetch和merge经常一起运行,因此创建了一个将两者结合在一起的命令pull。pull执行一个fetch,然后进行合并,将下载的提交添加到本地分支中。
之间的差异和
git fetch +拉= IU GIT GIT合并……
Git允许旧的应用chronologically提交后提交的更新。这是因为,法案提交到库之间的转移是分两个步骤:
复制到新的提交从远程复制本支部支部内部局域网远程回购。
(一
整合新的提交到本地分行
(
有两个方式做降压2。你可以:
在
What is the difference between
git pull andgit fetch ?
要理解这一点,首先需要了解本地Git不仅维护本地存储库,而且还维护远程存储库的本地副本。
另一方面,
Git使用两个命令从远程到本地获取最新版本的分支:
git fetch:git将从远程获取最新版本到本地,但不会自动合并。&(b)
&上述命令意味着从远程到源站主分支下载主分支的最新版本。然后比较本地主分支和源主分支。最后,合并。
git pull:git将从远程获取最新版本并合并到本地。
&(b)
&上面的命令相当于
Git拉=(git fetch + git merge)
git fetch不改变本地分支。
如果你已经有一个本地存储一个远程设置为所需的项目,你可以标记的坟墓所有分支和远程使用现有的git fetch。……不做任何改变读取本地的分支,所以你将需要一个远程分支合并到本地分行提取配对伴侣新的变化。在GitHub
实际上,Git维护了您自己的代码的副本,并且远程存储库。
命令
命令
试着变得清晰和简单。
根据您的配置,git pull命令实际上是用于git fetch的
初学者的简单图形表示,
在这里,
1 | git pull |
将从存储库中提取代码并与本地的重新平衡…在Git Pull中,有可能创建新的提交。
但在,
吉特取出
将从存储库中获取代码,我们需要使用
我将从服务器主服务器获取数据,并在本地主服务器中对其进行重新设置。
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, thegit 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). Runninggit 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)之间的区别。
简而言之:
以东十一〔十七〕把新东西放在你的东西上面。
简单地说,如果你要跳上一架没有互联网的飞机……在起飞前,你只需跳上一架
在飞机上,您可以对本地工作区进行更改,然后将其与您获取的内容合并,并在没有Internet的情况下解决潜在的合并冲突。除非有人对远程回购进行了新的冲突性更改,否则一旦您到达目的地,您将执行
从这个令人敬畏的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 thegit 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 andgit 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 executegit 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 merge 。 - 基本上不安全。很有侵略性。
- 与
git fetch 不同,它只影响你的.git/refs/remotes ,git pull会影响你的.git/refs/remotes 和.git/refs/heads/ 。
嗯……那么,如果我没有用
好问题。它把它放在与你的工作副本隔离的地方。但又在哪里呢?让我们来查一下。
在您的项目目录中(即您在其中执行
现在做
一个很好的相关答案也可以找到"git fetch"在哪里?
还可以从git分支命名约定日志中查找"斜线符号"。
我相信大多数答案都能很好地回答这个问题。我会强调何时使用它。
当您需要获得其他开发人员的更新,但又希望无障碍地继续您的工作时,fetch可能很有用。经常想下线工作的人使用
而那些在网上工作并且非常确定自己的变化并希望获得最新代码的人,以及那些直接使用
吉特取出
帮助您了解
大多数情况下,
1 2 | git fetch --all // get known about latest updates git reset --hard origin/[branch] // revert to current branch state |
GIT拉力
此命令用当前的
Documentation for GitFlow https://gist.github.com/peterdeweese/4251497
git fetch将远程存储库的目录同步到本地。它不会将文件/代码从远程更改合并到本地分支。
git pull下载与当前本地分支相关的更改,然后将其合并。