Git->git pull 和 git pull --rebase的详解

Git拉取代码的坑

  • 格式:git xx指令 origin/远程仓库分支名称
  • 假如本地仓库和远程仓库都是空的
    • 本地仓库向远程仓库提交一个文件
      • git commit -a -m "local first commit"-a暂存修改文件到暂存区,准备本地提交。-m表示提交信息
      • git push origin refs/heads/master:将本地master分支的最新本地提交(refs/heads/master)推送到远程仓库origin的同名分支
  • 本地仓库分支记录
  • 远程仓库分支记录

git fetch

从远程仓库获取本地仓库所有尚未拥有的版本更新,只是获取,不会进行远程仓库和本地仓库的代码合并和代码变基,需要手动进行代码合并git merge origin/master代码变基git rebase origin/master`

  • 远程仓库有一笔新的远程提交,本地仓库并没有办法感知
  • 本地仓库使用git fetch查看远程仓库最新的代码提交
    • 本地仓库分支记录
    • 远程仓库分支记录

git merge origin/master

  • 假如本地仓库没有本地提交,本地仓库使用git merge origin/master手动合并刚才git fetch获取到远程仓库的代码更新。此时本地仓库和远程仓库的代码一致
    • 本地仓库分支记录
    • 远程仓库分支记录
  • 假如本地仓库有本地提交,本地仓库使用git merge origin/master手动合并刚才git fetch获取到远程仓库的代码更新,需要在本地仓库解决冲突的代码文件
    • 本地仓库做一些修改并本地提交git commit -a -m "local second commit",但还没有推送到远程仓库
    • 远程仓库做一些修改并远程提交
    • 本地仓库使用git fetch查看远程仓库最新的代码提交
      • 本地仓库分支记录
      • 远程仓库分支记录
    • git merge origin/master手动合并刚才git fetch获取到远程仓库的代码更新,需要本地解决冲突
    • 冲突解决完成后,提交到本地仓库git commit -a -m "merge local origin commit",再推送到远程仓库git push origin refs/heads/master,本地仓库和远程仓库的代码才会一致,git merge方式会造成代码提交的分叉和合并
    • 本地分支记录
    • 远程分支记录

git rebase origin/master

  • 假如本地仓库没有本地修改和本地提交,本地仓库使用git rebase origin/master手动变基刚才git fetch获取到远程仓库的代码更新,此时本地仓库和远程仓库的代码一致
  • 远程仓库有一笔新的远程提交,本地仓库并没有办法感知
    • 本地分支记录
    • 远程分支记录
  • 假如本地仓库有本地提交,本地仓库使用git rebase origin/master手动合并刚才git fetch获取到远程仓库的代码更新,需要在本地仓库解决冲突的代码文件
    • 本地仓库做一些修改并本地提交git commit -a -m "local thid commit",但还没有推送到远程仓库

    • 远程仓库做一些修改并远程提交

    • 本地仓库使用git fetch查看远程仓库最新的代码提交

      • 本地仓库分支记录

      • 远程仓库分支记录

    • git rebase origin/master手动合并刚才git fetch获取到远程仓库的代码更新,需要本地解决冲突

    • 冲突解决完成后,提交到本地仓库的暂存区git add hello.txt,再使用git rebase --continue执行之前被冲突打断的rebase操作,git会自动创建一个线性提交,不会像git merge那样的分叉和合并

总结

  • git fetch:从远程仓库获取最新的代码更新,但是不会自动合并或修改你的本地仓库代码
  • git merge:合并两个分支代码,会出现代码提交的分叉和合并,非线性合并
  • git rebase:合并两个分支代码,不会出现代码提交的分叉和合并,线性合并
  • git pullgit fetch + get merge的组合,用远程仓库代码更新本地仓库的代码,非线性合并
  • git pull --rebasegit fetch + get rebase的组合,用远程仓库代码更新本地仓库的代码,线性合并
相关推荐
2601_962071575 小时前
【Java报错已解决】org.springframework.beans.factory.BeanCreationException
java·开发语言
TDengine (老段)5 小时前
TDengine 线程模型 — 网络、调度、执行
大数据·数据库·物联网·制造·时序数据库·tdengine·涛思数据
天空之城--5 小时前
Android Koin 完全指南:从原理到实践
android
淡海水6 小时前
07-04-并发-ConcurrentBag-T-工作窃取WorkStealing算法
开发语言·算法·c#·bag·concurrent·workstealing
zhangphil6 小时前
Android main thread主线程Choreographer doFrame发生FullSuspendCheck
android
CS_Zero6 小时前
C语言sizeof是函数吗?
c语言·开发语言
-今昭-7 小时前
《V2V 迁移实战:将 VMware 虚拟机转为 OpenStack 可用 Glance qcow2 镜像》
开发语言·python
智购科技自动贩卖机7 小时前
自动售货机嵌入式状态机设计实战:从45个事件源到层次型状态机的工程重构
大数据·人工智能·stm32·物联网·重构·硬件架构
乐迪信息7 小时前
智慧港口船舶AI算法实现在线状态监测
大数据·人工智能·深度学习·算法·计算机视觉
Raas1008 小时前
MAI Gateway(魔芋企业级AI网关)对比分析:AI网关和API网关区别?企业级能力差距一览
大数据·人工智能·数据挖掘·mai gateway·企业级产品