'git pull'和'git fetch'有什么区别?

主持人注意:鉴于这个问题已经发布了64个答案,请考虑在发布另一个答案之前你是否提供了新的东西

git pullgit fetch什么区别?


用最简单的话来说, git pull执行git fetch然后是git merge

你可以随时做git fetch来更新远程追踪分支,在refs/remotes/<remote>/

这个操作永远不会改变任何你自己的本地分支在refs/heads ,并且在不改变你的工作副本的情况下是安全的。 我甚至听说过人们会在后台定期执行git fetch工作(尽管我不会推荐这么做)。

git pull就是你要做的就是让本地分支与远程版本保持同步,同时也更新你的其他远程跟踪分支。

Git文档: git pull


  • 当你使用pull ,Git会尝试自动为你做你的工作。 它是上下文敏感的 ,所以Git会合并任何被拉入提交你当前工作的分支。 pull 自动合并的提交没有让你第一次审查。 如果你不密切管理你的分支机构,你可能会遇到频繁的冲突。

  • 当您fetch ,Git收集目标分支中不存在于您当前分支中的任何提交,并将它们存储在本地存储库中 。 但是, 它不会将它们与您当前的分支合并 。 如果你需要保持你的版本库是最新版本的,那么这是特别有用的,但是如果你更新你的文件,它正在处理一些可能会中断的事情。 要将提交集成到主分支中,可以使用merge


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

    Subversion是通过客户端/服务器模型设计和构建的。 有一个单独的存储库是服务器,并且多个客户端可以从服务器获取代码,对其进行处理,然后将其提交回服务器。 假设客户端可以在需要执行操作时始终联系服务器。

    Git被设计为支持更多分布式模型,而不需要中央存储库(尽管如果你愿意,你可以使用一个)。 此外,git的设计使客户端和“服务器”不需要同时在线。 Git的设计使得不可靠链接上的用户甚至可以通过电子邮件交换代码。 可以完全断开连接并刻录CD以通过git交换代码。

    为了支持这个模型,git使用你的代码维护一个本地存储库,并且还有一个额外的本地存储库来反映远程存储库的状态。 通过本地保存远程仓库的副本,即使远程仓库无法访问,git也可以找出所需的更改。 之后,当你需要将更改发送给其他人时,git可以将它们作为远程存储库已知时间点的一组更改进行传输。

  • git fetch是这样的命令:“使我的本地远程仓库副本保持最新状态”。

  • git pull说:“在保留我自己的代码的远程存储库中引入更改。”

  • 通常, git pull通过执行git fetch来实现远程存储库的本地副本更新,然后将更改合并到您自己的代码存储库以及可能的工作副本中。

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

    链接地址: http://www.djcxy.com/p/7.html

    上一篇: What is the difference between 'git pull' and 'git fetch'?

    下一篇: How do I delete a Git branch both locally and remotely?