aliases: []
tags: [git]

link:

date: 2022-08-30

git pull --rebase

在 push 代码时,会提示使用 git pull 命令,也就是拉取远端代码,更新我们的仓库,那么为什么又要加个 --rebase 命令呢?下面来说说这个问题,先从这两命令开始。

git pull = git fetch + git merge FETCH_HEAD

git pull --rebase =  git fetch + git rebase FETCH_HEAD

二者的区别是,在 fetch 之后的操作不同,merge 与 rebase 的不同。

假设当前 master 的提交如下:

如果是你或者你的同事在 cid2 点,开发进度是 cid20(或者突然撇出一个分支,假设是 tmp 分支),此时要把 cid20 提交到 master

在 master 执行 git merge tmp, 然后会得到如下结果:

那么来看看 git rebase,  在 master 执行 git rebase tmp,操作之后的分支如下:

二者对比可知,rebase 没有产生新的节点,使用 rebase 的 git 演进路线 (提交树) 是一直向前的,这样在版本回退时也很容易,用 merge 的 git 路线是跳跃的,如果版本回退你也找不到自己想要的版本,如果在 merge 时出现了冲突那就麻烦了,当前 merge 就不能继续进行下去,需要手动修改冲突内容后,add,commit, push. 而 rebase 操作的话,会中断 rebase, 进入rebasing状态,这时我们需要解决冲突后执行git add,然后执行git rebase --continue直至冲突解决完毕,自动退出rebasing状态,再 push.

想要更好的提交树,建议使用 rebase 操作会更好一点,这样可以线性的看到每一次提交,并且没有增加提交节点。不过也有些项目,不建议使用 rebase, 这就得看公司与项目的规定。

等效命令

  1. git stash先暂存代码
  2. git pull拉到最新
  3. git add并commit

总结

在提交代码前如果无法拉取最新代码,除了可以使用git stash暂存,还可以使用git commit配合git pull --rebase提交代码,最终达到减少代码”不良记录“的目的

参考文章

blog.csdn.net

git pull与git pull --rebase的更多相关文章

  1. Difference between git pull and git pull --rebase

    个人博客地址:  http://www.iwangzheng.com/ 推荐一本非常好的书 :<Pro Git>  http://iissnan.com/progit/ 构造干净的 Git ...

  2. 对比git pull和git pull --rebase

    1.使用下面的关系区别这两个操作:git pull = git fetch + git mergegit pull --rebase = git fetch + git rebase 2 一.基本 g ...

  3. 简单对比git pull和git pull --rebase的使用

    使用下面的关系区别这两个操作:git pull = git fetch + git mergegit pull --rebase = git fetch + git rebase 现在来看看git m ...

  4. 【Git】git pull和git pull --rebase的使用

    git pull = git fetch + git mergegit pull --rebase = git fetch + git rebase 现在来看看git merge和git rebase ...

  5. git fetch 、git pull 与 git pull --rebase

    1. git fetch 与 git pull 都是从远程拉取代码到本地,git fetch只是拉取到本地,git pull不仅拉取到本地还merge到本地分支中.所以git pull是git fet ...

  6. git pull和git pull --rebase的使用

    使用下面的关系区别这两个操作: git pull = git fetch + git merge git pull --rebase = git fetch + git rebase 现在来看看git ...

  7. 差异:git clone , git fetch, git pull和git rebase

    随笔 - 96  文章 - 1  评论 - 6   Git Pull据我所知,当你使用git pull时,它将会获取远程服务器(你请求的,无论什么分支)上的代码,并且立即合并到你的本地厂库,Pull是 ...

  8. Git 协作:Fetch Pull Push Branch Remote Rebase Cherry-pick相关

    前言 学习git的时候,我们首先学习的是最常用的,自己独立开发Software时用的命令: git init //初始化git仓库 git add <file_name> //将文件添加到 ...

  9. git pull、git fetch、git merge、git rebase的区别

    一.git pull与git fetch区别 1.两者的区别       两者都是更新远程仓库代码到本地. git fetch相当于是从远程获取最新版本到本地,不会自动merge. 只是将远程仓库最新 ...

随机推荐

  1. 【java】学习路线14-抽象类、多态

    /*抽象类 abstractabstract class A{    }注意abstract类中不一定需要有abstract方法但是有abstract方法的类中,该类一定是abstract方法抽象类不 ...

  2. 第五十二篇:webpack的loader(三) -url-loader (图片的loader)

    好家伙, 1.什么是base64? 图片的 base64 编码就是可以将一副图片数据编码成一串字符串,使用该字符串代替图像地址. 这样做有什么意义呢?我们知道,我们所看到的网页上的每一个图片,都是需要 ...

  3. RTSP播放器开发填坑之道

    好多开发者提到,在目前开源播放器如此泛滥的情况下,为什么还需要做自研框架的RTSP播放器,自研和开源播放器,到底好在哪些方面?以下大概聊聊我们的一点经验,感兴趣的,可以关注 github: 1. 低延 ...

  4. MAC Golang环境搭建

    1. 下载golang 下载地址:https://golang.google.cn/dl/ 根据MAC左上角苹果图标->关于本机,即可查看芯片类型 2. 安装golang 在 下载 中双击 下载 ...

  5. AD画板从头开始

    AD画板从头开始 前言 近期认真的画了一次板子,以前虽然也画过,但是都是很随意的,这次是做一个小项目,然后因为有一段时间没有画板了,发现自己很多基础的东西都忘记了,这里就来记录一下从头到尾的过程.本次 ...

  6. ProxySQL配置之MySQL服务器配置

    备注:文章编写时间201904-201905期间,后续官方在github的更新没有被写入 MySQL服务器配置 [MySQL Server Configuration] 一.在ProxySQL中配置后 ...

  7. logstash中output{}的另类写法

    日志传输路径如下: filebeat->redis->logstash->es 在filebeat配置文件中,收集日志的时候配置的有如下参数: fields: log_source: ...

  8. ELK Stack 日志平台性能优化

    转载自: https://mp.weixin.qq.com/s?__biz=MzAwNTM5Njk3Mw==&mid=2247487789&idx=1&sn=def0d8c2e ...

  9. 使用Docker Compose部署SpringCloud项目docker-compose.yml文件示例

    注意各组件之间的依赖关系 microservice-discovery-eureka: image: reg.itmuch.com/microservice-discovery-eureka port ...

  10. sql语句的组成

    数据定义语言(DDL,Data Definition Language):包括CREATE(创建)ALTER(修改)DROP(删除)等. 数据操纵语言(DML,Data Manipulation La ...