git 更新篇之fetch与pull

发布日期 目录 Git

git fetch 与 git pull的区别

在 git 中有两种从远程服务器更新代码的方式:git fetch\git pull,这里记录下学到的知识。

说到更新本地代码,就得说说更新下来的是啥,是代码肯定不用说,这里其实更新下来的是根据 commit-id 记录的代码。每次提交的代码都已 commit-id 记录下来,这样在更新代码的时候,对比一下本地与服务器的 commit-id,然后根据最新的 commit-id 来拉取远程服务器上的最新提交代码。

既然知道了更新的方式,这时咱先说说 git fetch:

git fetch 这个命令会访问远程仓库,从中拉取所有你还没有的数据标识。 执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看。或者稍专业点说:这将更新远程服务器中所有的远程仓库 所包含分支的最新 commit-id, 将其记录到.git/FETCH_HEAD文件中

HEAD:表示版本,HEAD表示当前版本,也就是最新提交commit-id。这里可以理解为一个commit-id为一个HEAD版本。

FETCH_HEAD: 是一个版本链接,记录在本地的一个文件中,指向着目前已经从远程仓库取下来的分支的末端版本。

这里默认只有一个远程仓库,为了方便理解,这里默认都是一个远程仓库。git fetch 命令后面还可以跟参数,来指定远程仓库/远程分支,这里只介绍最简单用法即不跟参数的用法。

上面的注释中说了 git fetch 更新下来的代码都记录在本地的一个文件中,可以理解为获取一下有哪些新提交的代码,这时候并不会把最新的代码合并下来,如果需要合并到本地还需要执行git merge操作,将远程最新的提交代码合并到本地。

好,知道 git fetch 只是获取远程服务器的最新代码,再来说下 git pull:

git pull 命令本质上是执行了 git fetch 后又执行了git merge 来把代码合并到本地,这也是我们常用的合并代码的方式用 git pull,而很少听说过 git fetch。知道了 git pull 的实质,也就说完了 git pull;

说完了 git fetch 与 git pull 的区别,还想再说下 git pull,刚才知道了git pull 是使用 git merge 命令来拉取代码,其实除了使用 merge 命令合并代码外还有一种合并的方式–rebase。这里不说二者之间的区别,二者的区别以后再说。

这里说下使用 git pull 时如何使用 git rebase 来合并代码:

只要在 git pull 后面跟上参数就可以了,命令行:

git pull --rebase

这样就使用了 rebase 的方式来合并代码了。

但是每次更新代码都要这样操作会有点麻烦,其实我们可以配置全局git pull 默认使用 rebase 的方式合并代码。

git config --global pull.rebase true

上面的设置适用与git版本1.7.9以后的版本,现在下载的git版本一般都2.0以后。如果你使用的版本是1.7.9以前的,则需要使用下一种命令 git config --global branch.autosetuprebase always

发表评论

邮箱地址不会被公开。