Git 学习日记–git fetch参数
背景
git fetch执行后完成两个步骤:
- 从远程仓库下载本地仓库中缺失的提交记录
- 更新远程分支指针(如
origin/master)
即git fetch实际上将本地仓库中的远程分支更新成了远程仓库相应分支最新的状态
git fetch通常通过互联网(HTTPS协议和SSH等协议)与远程仓库通信。
注意:
git fetch并不会改变你本地仓库的状态,也不会修改你磁盘上的文件,git fetch为单纯的下载操作。
git fetch origin/master + git merge origin/master = git pull:下载并更新为远程仓库的内容,即同步
git fetch 的参数
类似于git push的参数方法,git fetch的参数非常类似,他们的概念是相同的,方向是相反的(此处为下载而非上传)
-
<place>参数git fetch origin <place>:从远程<place>分支上拉取到本地对应的分支上- 执行
git fetch origin foo命令后,会从远程foo分支下载,并更新本地的o/foo分支,没有更新本地的非远程分支foo
- 执行
-
<source>:<destation>参数命令能够直接更新本地分支,不过不能在检出当前分支上干这件事,在其他分支上可以。
fetch的两个参数与git push是正好相反的:-
<source>指的是远程仓库中的位置 -
<destation>是要放置提交的本地仓库的位置
-
- 执行
git fetch origin foo~1:bar,Git将foo~1解析成一个 origin 仓库的位置,然后将那些提交记录下载到了本地的bar分支(一个本地分支)上。注意由于我们指定了目标分支,foo和o/foo都没有被更新:
- 如果目标分支不存在,即本地分支不存在目标分支情况,会和
git push一样,Git会在fetch前自己创建立本地分支, 就像是Git在push时,如果远程仓库中不存在目标分支,会自己在建立一样。
-
执行
git fetch origin foo~1:bar -
没有参数
它会下载所有的提交记录到各个对应的远程分支上:
例子
-
初始状态
-
目标状态
-
执行
git fetch origin foo:master,即从远程的foo分支上提取更新到本地master分支上: -
执行
git fetch origin master^:foo从远程master分支的前一个更新点下载更新到本地的foo分支: -
执行
git merge master,切换到foo分支,并合并本地merge和foo分支:
骚操作
git fetch和git push均能带<source>参数,但是也能够省略该参数,直接接冒号,再接<destation>参数:
-
git push origin :foo:删除远程仓库的foo分支 -
git fetch origin :bar:在本地分支创建bar分支
git pull 的参数
背景
git pull 其实就是fetch后面跟merge的缩写,可以理解为使用同样的参数执行git fetch,然后再merge你所抓到的提交记录
参数
-
只有
<place>参数:git pull origin foo相当于:git fetch origin foo; git merge o/foo -
有
<source>和<destation>参数:git pull origin bar~1:bugFix相当于:git fetch origin bar~1:bugFix; git merge bugFix,注意:可不在bugFix分支
例子
-
初始状态:注意本地在master分支上
-
目标状态:
-
执行
git pull origin bar:foo,从远程分支上bar拉取更新的到本地,并创建本地分支foo,同时将该分支合并到master分支上: -
执行
git pull origin master:side,从远程分支上master拉取更新的到本地,并创建本地分支side,同时将该分支合并到master分支上: