用最简单的术语来说,git pull
执行 git fetch
然后执行 git merge
。
您可以随时进行 git fetch
来更新 refs/remotes/<remote>/
下的远程跟踪分支。
此操作永远不会更改 refs/heads
下的任何本地分支,并且可以安全地执行而无需更改工作副本。甚至有人在后台 cron 作业中定期运行 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
来使远程存储库的本地副本更新,然后将更改合并到您自己的代码存储库以及可能的工作副本中。
需要注意的是,工作站上通常至少有三个项目副本 。一个副本是您自己的存储库,具有您自己的提交历史记第二个副本是您正在编辑和构建的工作副本。第三个副本是远程存储库的本地 “缓存” 副本。