两者之间有什么区别?git pullgit fetch?


当前回答

Git 获取

帮助您从一个git repository。让我们假设你在一个团队中工作 使用GitFlow,其中团队在多个branches(特征). 与git fetch --all command您可以了解所有新的信息branchesrepository.

大部分git fetch用于git reset。例如,您想要将全部本地更改恢复到当前仓库状态。

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

Git 拉着

此命令更新您branch与当前repository branch状态。让我们继续GitFlow多个特性branches原为mergeddevelop分支,当您想要为项目开发新特性时,您必须去开发branch并做一个git pull以获得当前状态develop branch

GitFlow 文档文档https://gist.github.com/peterdeweese/4251497

其他回答

更简短

git fetch获取更新但不将其合并 。

git pull是否为 a 的git fetch兜帽下,然后一个merge.

简简

git fetch类似pull但它不合并。 也就是说, 它会获取远程更新( NAME OF TRANSLATORS) 。refsobjects)但您的居住地保持不变(即:origin/master得到更新,但master保留原样) 。 。

git pull从一个远程的并瞬间合并中拉下来。

更多

git clone克隆回购 。

git rebase将不属于上游分支的当前分支保存到临时区域。 您的分支现在和您开始更改前一样。 所以,git pull -rebase将拉下远程修改, 倒转您的本地分支, 重放您的变化 在您当前分支的顶部 一个一个一个地重放 直到您更新。

还有git branch -a将显示你们所有分支—— 本地和远程分支—— 究竟发生了什么。

这个博客文章很有用:

Git 拉拉、 Git 抓取和 Git 克隆( 和 Git 重新基底) - Mike Pearce 的区别

和涵盖范围git pull, git fetch, git clonegit rebase.

最新更新

我想我应该更新这个 来显示你是如何实际使用这个的。

  1. 从远程更新您的本地副本( 但不要合并) :

     git fetch 
    
  2. 下载更新后,

     git diff master origin/master 
    
  3. 如果你对最新消息满意的话, 合并一下:

     git pull
    

注:

第2步:更多关于本地和远程之间差异的信息,见:如何比较本地 Git 分支与其远程分支的比较

第三步:也许更准确(例如,在快速变化的回购上)git rebase origin此处。 见@ Justin Ohms 评论在另一个答案中。

另见:http://longair.net/blog/2009/04/16/git-fetch-and-merge/

注:我还提到mergea 期间pull然而,您仍然可以配置pull使用rebase取而代之。

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

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

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

  2. Git将从远程获取最新版本, 并合并到本地 。

        git pull origin master

    以上命令相当于git fetchgit merge在实践中,git fetch也许更安全,因为在合并之前,我们可以看到变化,决定是否合并。

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.

如果你想要合并历史,你会拉拉, 你会拉拉,你会拉拉拉,如果你只是"想要的cotz" ,因为有人一直在标记 一些文章在这里。

两者有什么区别?git pullgit fetch?

要理解这一点,你首先需要明白,你所在的本地数据库不仅维护着您的本地存储库,而且还维护着远程存储库的本地副本。

git fetch将远程仓库的本地副本更新到最新 。 例如, 如果您的远程仓库是 GitHub , 您可能想要将远程仓库中所做的任何更改移到您的本地副本 远程仓库。 这将允许您执行比较或合并等操作 。

git pull另一方面,会将远程仓库的更改降低到您保存自己的代码的位置。 通常,git pull会做一个git fetch首先将远程存储库的本地副本更新, 然后它将把修改合并到您自己的代码存储库中, 并可能合并到您的工作副本中 。

重要的是,将设计理论与SVN这种较传统的源控制工具的理论加以对比。

Subversion 是用客户端/ 服务器模型设计和构建的。 服务器是一个单一的仓库, 有几个客户可以从服务器上获取代码, 工作, 然后将其发送到服务器 。 假设客户总是可以在服务器需要操作时与服务器联系 。

Git 的设计是为了支持一个更分散的模型,而不需要一个中央存储库(尽管如果您愿意,您肯定可以使用一个)。 Git 的设计也是为了让客户和“服务器”不必同时上网。 Git的设计是为了让不可靠的链接上的人可以通过电子邮件交换代码,甚至可以。可以完全断开工作,烧掉CD,通过 git 交换代码。

为了支持此模型 git , 维持一个包含您的代码的本地仓库, 以及一个反映远程仓库状态的附加本地仓库。 通过保存远程仓库的副本, git 可以在本地找到所需的更改, 即使远程仓库无法到达 。 稍后当您需要将更改发送到其他人时, git 也可以从远程仓库已知的时间点将其转换为一组更改 。

  • git fetch是命令 上面写着"把我的远程仓库的本地副本更新到最新"

  • git pull将远程存储库的更改 带到我保存自己代码的地方

通常为git pull这样做的方式是:git fetch以更新远程存储库的本地副本,然后将修改合并到自己的代码存储库中,并可能合并到工作副本中。

需要铭记的是,至少有至少三份三份工作站上的一个工程。 一个副本是您自己的存储库, 并有您自己的承诺历史。 第二个副本是您正在编辑和构建的工作副本。 第三个副本是您的远程存储库的本地“ cashed” 副本 。