git fetch和git pull命令都是将远端仓库代码更新至本地,那么他们两者有什么区别呢?简单概括两者区别如图所示:
git fetch 与 git pull - 图1
git fetch 与 git pull 图解
git fetch:是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。具体操作如下:

  1. # 本地新建一个temp分支,并将远程origin仓库的master分支代码下载到本地temp分支
  2. git fetch origin master:temp
  3. # 比较远程代码与本地代码的区别
  4. git diff temp
  5. # 将temp分支合并到本地master分支
  6. git merge temp
  7. # 如果不想保留分支,可以将其删除
  8. git branch -d temp

git pull:基于本地的FETCH_HEAD记录,比对本地的FETCH_HEAD与远程仓库的版本号,然后git fetch获得当前的远程分支的后续版本的数据,然后利用git merge将其与本地的分支合并,可以认为是git pull是git fetch和git merge两个步骤的合并。实际的git pull过程可以理解为:

  1. # 将远端的master分支拉取最新内容
  2. git fetch origin master
  3. # 将拉取的最新内容与当前分支合并
  4. git merge FETCH_HEAD

git pull用法:

  1. # 将远程主机的某个分支,与本地的指定分支合并
  2. git pull <远程主机名> <远程分支名>:<本地分支名>

git pull合并后可能会出现冲突,需要手动解决冲突。出现的错误提示如下

  1. error: Your local changes to the following files would be overwritten by merge:
  2. Please commit your changes or stash them before you merge.
  3. # 更新的代码与本地的修改代码有冲突,先提交你的改变或者先将本地修改暂存起来

解决冲突的方式:先将本地的代码暂存

  1. # 先将本地修改暂存起来
  2. git stash
  3. # 查看保存信息
  4. git stash list
  5. # 拉取内容
  6. git pull
  7. # 还原暂存的内容
  8. git stash pop

参考文章

详解 git fetch 与 git pull 区别处理git pull 冲突