简单来说,git pull = git fetch + git merge,分开来执行,以便将远程内容拉取到本地后,检查满意了,再 merge 到本地分支。
1. git fetch
$ git fetch <远程主机名> //这个命令将某个远程主机的更新全部取回本地
$ git fetch origin master // 拉取远程主机 master 分支上的最新内容
取回更新后会返回一个 FETCH_HEAD,代表了某个分支在远程的最新状态。
$ git log -p FETCH_HEAD // 查看刚才拉的东西
$ get merge FETCH_HEAD // 满意了再合并到当前所在分支
2. git pull
git pull 的过程可以理解为:
git fetch origin master // master 分支仅为举例
get merge FETCH_HEAD
即将远程主机的某个分支的更新取回,并与本地指定的分支合并,完整格式可表示为:
$ git pull <远程主机名> <远程分支名>:<本地分支名>
但平时好像都是直接粗暴地用了简写,直接 git pull 也能行,那是因为在最初的时候,git 本地新建一个分支后,必须要做远程分支关联。如果没有关联, git 会提示你显式地添加关联,关联目的是如果在本地分支下操作 git pull 和 git push 时不需要再次指定远程分支。
image.pnggit 查看远程主机详细配置信息,非常详细地记录了 git pull 和 git push 时的策略:
git remote show origin
1
2
关联的不满意?之前不小心关联错了?可以修改关联:
$ git branch --set-upstream-to origin/分支名 // 不仅可以和远程分支关联也可以和本地分支关联,具体有需求时再说
// Branch 'test-branch' set up to track remote branch 'dev' from 'origin'.
之后可以通过如下方式,查看是否更改成功:
git branch -vv
git remote show origin
cat .git/config
git branch -a // 查看本地和远程的所有分支
3. git push
git push <远程主机名> <本地分支名>:<远程分支名>
注意:以上格式中,如果单独省略本地分支名,相当于推送空的分支到远程分支,所以会删除远程分支!
参考文章:
网友评论