git pull
和 git fetch
是什么
- git fetch 命令用于从另一个存储库下载对象和引用
- git pull 命令用于从另一个存储库或本地分支获取并集成
当远端仓库里有新的内容时,就要使用到git pull
或者git fetch
命令把新的内容下载下来。
git fetch
是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。而git pull
则是将远程主机的最新内容拉下来后直接合并 ,即:git pull = git fetch + git merge
,这样可能会产生冲突,需要手动解决
在我们本地的git
文件中对应也存储了git
本地仓库分支的commit ID
和 跟踪的远程分支的commit ID
,对应文件如下:
- .git/refs/head/[本地分支]
- .git/refs/remotes/[正在跟踪的分支]
使用 git fetch
更新代码,本地的库中master
的commitID
不变,但是与git
上面关联的那个orign/master
的commit ID
发生改变。这时候我们本地相当于存储了两个代码的版本号,我们还要通过merge
去合并这两个不同的代码版本。也就是fetch
的时候本地的master
没有变化,但是与远程仓关联的那个版本号被更新了,接下来就是在本地merge
合并这两个版本号的代码。
使用git pull
就会直接将本地的代码更新至远程仓库里面最新的代码版本。
用法
git fetch
git fetch
用法如下:
xml
git fetch <远程主机名> <远程分支名>:<本地分支名>
例如从远程的origin
仓库的master
分支下载代码到本地并新建一个temp
分支
sql
git fetch origin master:temp
git pull
两者的用法十分相似,git pull
用法如下:
xml
git pull <远程主机名> <远程分支名>:<本地分支名>
例如将远程主机origin
的master
分支拉取过来,与本地的branchtest
分支合并,命令如下:
git pull origin master:branchtest
同样如果上述没有冒号,则表示将远程origin
仓库的master
分支拉取下来与本地当前分支合并。
区别
相同点:
- 在作用上他们的功能是相同的,都是起到了更新代码的作用。
不同点:
- **
git pull
是相当于从远程仓库获取最新版本,然后再与本地分支merge
,**即git pull = git fetch + git merge
。 git fetch
更安全,在merge
前,我们可以查看更新情况,根据实际情况再决定是否合并。