切换语言为:繁体
git pull 与 git fetch

git pull 与 git fetch

  • 爱糖宝
  • 2024-09-18
  • 2039
  • 0
  • 0

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

git pull 与 git fetch

vim出现场景

当git config --global pull.rebase为空--默认merge时:我当前拉取的远端版本为 B,此时修改了代码,并在本地仓库commit一次,但并未 push 到远端仓库。  另一位开发者在 B 的基础上,同样 commit 了一次并 push 到远端仓库。那么这个时候,我再 push 自己的代码就会发生错误。此时pull就会出现vim

git pull 与 git fetch

git pull 与 git fetch

git config --global pull.rebase true设置为默认变基之后:提示变基成功,且不会出现多余merge

git pull 与 git fetch

使用:git fetch,git rebase origin/main:(这个效果是和git pull的rebase效果一致的)

git pull 与 git fetch

再提交:

git pull 与 git fetch

注意

如果你发现自己跑出来的结果和我不一致,注意查看你当前git的rebase情况,当前git可能和global全局不一样

git pull 与 git fetch

结论

想要不出现vim编辑,出现多余的merge信息可以采用:

  • 使用git fetch git rebase origin/主分支,再正常的add提交代码

  • 使用git config pull.rebase true开启rebase,再git pull,再正常的add提交代码

0条评论

您的电子邮件等信息不会被公开,以下所有项均必填

OK! You can skip this field.