gitfetch与gitpull的区别详解
git fetch和git pull都可以将远端仓库更新⾄本地那么他们之间有何区别?想要弄清楚这个问题有有⼏个概念不得不提。FETCH_HEAD:是⼀个版本链接,记录在本地的⼀个⽂件中,指向着⽬前已经从远程仓库取下来的分⽀的末端版本。commit-id:在每次本地⼯作完成后,都会做⼀个git commit 操作来保存当前⼯作到本地的repo,此时会产⽣⼀个commit-id,这是⼀个能唯⼀标识⼀个版本的序列号。在使⽤git push后,这个序列号还会同步到远程仓库。
有了以上的概念再来说说git fetch
git fetch:这将更新git remote 中所有的远程仓库所包含分⽀的最新commit-id, 将其记录到.git/FETCH_HEAD⽂件中
git fetch更新远程仓库的⽅式如下:
git fetch origin master:tmp
//在本地新建⼀个temp分⽀,并将远程origin仓库的master分⽀代码下载到本地temp分⽀
git diff tmp
//来⽐较本地代码与刚刚从远程下载下来的代码的区别
git merge tmp
//合并temp分⽀到本地的master分⽀
git branch -d temp
//如果不想保留temp分⽀可以⽤这步删除
(1)如果直接使⽤git fetch,则步骤如下:
创建并更新本地远程分⽀。即创建并更新origin/xxx 分⽀,拉取代码到origin/xxx分⽀上。
在FETCH_HEAD中设定当前分⽀-origin/当前分⽀对应,如直接到时候git merge就可以将origin/abc合并到abc分⽀上。
git使用详解(2)git fetch origin
只是⼿动指定了要fetch的remote。在不指定分⽀时通常默认为master
(3)git fetch origin dev
指定远程remote和FETCH_HEAD,并且只拉取该分⽀的提交。
这个命令会访问远程仓库,从中拉取所有你还没有的数据。执⾏完成后,你将会拥有那个远程仓库中所有分⽀的引⽤,可以随时合并或查看。
如果你使⽤git clone 命令克隆了⼀个仓库,命令会⾃动将其添加为远程仓库(git remote -v)并默认以 “origin” 为简写。所以,git fetch origin 会抓取克隆(或上⼀次抓取)后新推送的所有⼯作。必须注意 git fetch 命令会将数据拉取到你的本地仓库- 它并不会⾃动合并或修改你当前的⼯作。当准备好时你必须⼿动将其合并⼊你的⼯作。
如果你有⼀个分⽀设置为跟踪⼀个远程分⽀,可以使⽤ git pull命令来⾃动的抓取然后合并远程分⽀到当前分⽀。这对你来说可能是⼀个更简单或更舒服的⼯作流程;默认情况下,git clone 命令会⾃动设置本地 master 分⽀跟踪克隆的远程仓库的master 分⽀(或不管是什么名字的默认分⽀)。运⾏ git pull 通常会从最初克隆的服务器上抓取数据并⾃动尝试合并到当前所在的分⽀。
git pull : ⾸先,基于本地的FETCH_HEAD记录,⽐对本地的FETCH_HEAD记录与远程仓库的版本号,然后git fetch 获得当前指向的远程分⽀的后续版本的数据,然后再利⽤git merge将其与本地的当前分⽀合并。所以可以认为git pull是git fetch和git merge两个步骤的结合。
git pull的⽤法如下:
git pull <;远程主机名> <;远程分⽀名>:<;本地分⽀名>
//取回远程主机某个分⽀的更新,再与本地的指定分⽀合并。
因此,与git pull相⽐git fetch相当于是从远程获取最新版本到本地,但不会⾃动merge。如果需要有选择的合并git fetch是更好的选择。效果相同时git pull将更为快捷。
注:⽤git pull更新代码的话就⽐较简单暴⼒了但是根据commit ID来看的话,他们实际的实现原理是不⼀样的,所以不要⽤git pull,⽤git fetch和git merge更加安全。
到此这篇关于git fetch与git pull的区别详解的⽂章就介绍到这了,更多相关git fetch与git pull区别内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论