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


当前回答

您可以从远程仓库获取, 查看差异, 然后拉动或合并 。

这是被称作远程仓库的示例origin和支派,和支派,master跟踪远程分支origin/master:

git checkout master                                                  
git fetch                                        
git diff origin/master
git rebase origin master

其他回答

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

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

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

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

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

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

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

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

更简短

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 pull --rebase

以上命令是我生命中最有用的命令 挽救了很多时间

在将您的新承诺推进到服务器之前, 请尝试此命令, 它会自动同步最新的服务器更改( 加上一个抓取 + 合并) , 并将您的承诺放在 Git 日志的顶部 。 无需担心手动拉动/ 合并 。

查找详细信息 :http://gitolite.com/git-pull--rebase

  • git pull获取承诺后尝试自动合并 。上下文敏感,因此所有被拉动的承诺都将合并为您目前活跃的分支。git pull自动合并承诺未经审查,而不先审查。。如果你不仔细管理自己的分支,你可能会遇到频繁的冲突。

  • git fetch收集当前分支中不存在的目标分支的任何承诺,并将其存储在本地仓库中然而,它不会与您当前分支合并。如果您需要不断更新您的仓库,但正在研究一些更新文件时可能中断的文件。要将承诺整合到当前分支中,您必须使用git merge之后。

简简单简的答案是:git pull简单git fetch和继 继 继 继 继 继git merge.

必须指出,git pull不管你喜不喜欢自动合并。这当然可能导致合并冲突。让我们假设你的远程是origin并且你的分支是master。如果您git diff origin/master在拉车之前,你应该对潜在的合并冲突有某种了解,并且可以据此为你的当地部门做好准备。

除了拉和推,一些工作流程涉及git rebase,例如这一条,我从相关条款中转述如下:

git pull origin master
git checkout foo-branch
git rebase master
git push origin foo-branch

如果你发现自己处于这种情况, 你可能会被诱惑git pull --rebase除非您真的知道自己在做什么 否则我建议不要这么做man页面git-pull版本, 版本2.3.5:

这是一个潜在危险的操作模式。 它重写历史, 当您已经发布历史时, 历史并不是好兆头。 除非您仔细阅读了 git- rebase(1) , 否则不要使用此选项 。