git fetch 与 git pull

x33g5p2x  于2021-12-18 转载在 其他  
字(1.1k)|赞(0)|评价(0)|浏览(459)

git flow 流程

先来看一张图吧:

大致流程是这样的:我们在本地(工作区)编写好代码,然后执行git命令git add 添加到暂存区,然后使用git commit提交到本地分支,然后使用git push推送到远程分支。

git fetch 与 git pull 区别

那么本地如果需要同步远程仓库的代码,一般是两种做法,一种是使用git fetch先将远程代码拿下来,然后再合并到本地分支;第二种就是直接使用git pull将远程代码直接与本地代码进行合并,包括本地分支和远程分支。

看下图,git fetch 命令更新代码,本地的库中mastercommitID不变,但是与git上面关联的那个orign/mastercommit ID变成了和远程代码库相同了。这时候我们本地相当于存储了两个代码的版本号,我们还要通过merge去合并这两个不同的代码版本,如果这两个版本都修改了同一处的代码,这时候merge就会出现冲突,然后我们解决冲突之后就生成了一个新的代码版本。

而下面的git pull命令会将本地的代码更新至远程仓库里面最新的代码版本,包含本地的分支,如果出现冲突,也需要手动解决。

虽然git pull看起来像git fetch+get merge,但是根据commit ID来看的话,他们实际的实现原理是不一样的。
这里建议是分两步做,在merge前可以看修改了什么内容,是否有冲突的代码,可以提前解决,防止冲突。

git fetch 工作流程

首先,先得到远程库上master分支的东西:

git fetch origin master

origin是远程仓库默认名,如果在 remote add的时候自己重新取了远程仓库名,那就用自己取的名字;master则是远程分支名。

这时候只是相当于从远程库拷了代码到本地,还没有和本地的merge,这就是为什么不直接pull,因为先fetchmerge我们就可以先看一下拉取下来的东西,再决定是否merge。

如果要在本地分支查看和刚刚拷下来的东西有什么区别,就用:

git diff yourlocalbranch oringin/master

下来就是在当前分支上,合并origin/master,就要用merge了:

git merge oringin/master

还可以用:

git rebase origin/master

如果有冲突,那就解决冲突,再commit。若实在解决不了弄得乱七八糟想恢复可以:

git reset merge

还有就是如果明明添加了远程分支,但是用 git branch -a又看不到,怎么办呢?运行:

git remote update

相关文章