git pull和git fetch
首先我们直接抛出面试回答(疑惑的同学可以先看完再回来看结论):
两个的本质其实都是想同步远程最新代码,最开始其实我用的都是pull,方便嘛,但是在又一次pull发现会出现vim的编辑界面,后面去尝试了,当我修改了a分支,准备提交,而且a分支也被其他人修改的同时,就会出现vim这个编辑界面。然后查了资料,发现这其中其实还牵扯到一个rebase的问题,提交时使用fetch同步之后进行git rebase操作,再push代码,是不会出现merge信息的。而使用pull就会多出一条merge信息(merge main of 分支),因为在pull默认参数是merge下,其实pull=fetch+merge。当然对于其实习惯用pull操作来说,也可以设置rebase,就可以实现rebase,他默认是merge。
什么是rebase
变基rebase
rebase称为变基,字面就是改变基底的意思,比如当我从master的commit3时切出分支a,同时有其他同学提交了代码,更新到了commit5,使用rebase就能让a分支从基于commit3到基于最新的commit5
vim出现场景
当git config --global pull.rebase为空--默认merge时
:我当前拉取的远端版本为 B,此时修改了代码,并在本地仓库commit一次,但并未 push 到远端仓库。 另一位开发者在 B 的基础上,同样 commit 了一次并 push 到远端仓库。那么这个时候,我再 push 自己的代码就会发生错误。此时pull就会出现vim
git config --global pull.rebase true设置为默认变基之后
:提示变基成功,且不会出现多余merge
使用:git fetch,git rebase origin/main
:(这个效果是和git pull的rebase效果一致的)
再提交:
注意
如果你发现自己跑出来的结果和我不一致,注意查看你当前git的rebase情况,当前git可能和global全局不一样
结论
想要不出现vim编辑,出现多余的merge信息可以采用:
使用
git fetch
git rebase origin/主分支
,再正常的add提交代码使用
git config pull.rebase true
开启rebase,再git pull
,再正常的add提交代码