大厂技术  高级前端  Node进阶

点击上方 程序员成长指北,关注公众号

回复1,加入高级Node交流群

作者:张京

链接:https://segmentfault.com/a/1190000040712052

为什么要变基

Git官方文档中提到:

在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase

merge也就是合并,这个概念很容易理解,我们从分支上拉取代码进行修改,再提交的时候,如果遇到了别人的修改,则把我们的修改和他们的修改合并一下。那么rebase中文译为变基是什么意思呢?

首先要理解这个basebase也就是基础的意思,当我们从代码分支上获取代码的时候,我们就有了一个基础,也就是base,此后的修改我们都是在这个基础之上进行的,但是当我们需要提交修改的时候,遇到了别人的代码,变基这个操作就是在这个时候,我们不去合并别人的代码,而是直接把我们原先的基础变掉,变成以别人修改过后的新代码为基础,把我们的修改在这个新的基础之上重新进行。基础变掉了,所以叫作变基

那么,变基有什么好处呢?好处之一是可以使我们的时间线变得非常干净,以前采用合并的时候,时间线里完整记录了我们的代码是从哪个基础上拉取出来的,做了哪些修改,然后又在哪个时间点合并回分支去,而采用变基之后,时间线上不再反映拉取的时间点,因为每次提交都是以最新代码为基础的,所以时间线就变成了一根直线。

下面拿两个真实例子给大家更直观地看一下:

这是采用自动变基之前的时间线,可以看到,各种混乱:

这是采用自动变基之后的时间线,非常整齐,可以很清楚地看到哪一次修改之后又发生了什么修改,而不是多次修改纠缠在一起:

自动变基

虽然网上关于变基的教程很多,但是一般初学者总会感到茫然,不敢轻易下手,怕万一把时间线弄坏了,一发不可收拾。而且所有关于变基的命令都和我们已经多年习惯了的pull/add/commit/push不一样,很多图形化的工具例如vscode也不直接支持rebase这样的命令,都需要手工输入,繁琐而且容易出错。所以我们今天不讲太多的rebase命令怎么用,而直接用两条命令设置一下,从此以后让你每次提交都可以自动变基,而不必改变之前的任何操作习惯。这两条命令就是:

git config --global pull.rebase true
git config --global rebase.autoStash true

这两条命令在任意一台电脑上都只需要设置一次,而且一次设置,全局生效,所有的项目以后每次pull/push都会自动变基,再也不用担心在提交之前忘记变基了。

原理

如果不想了解原理的话,则执行完上面两条命令就可以去开心地变基了,完全没有问题。如果想了解一些原理,可以接着往下看。下面我们来详细解释一下这两条命令的原理:

首先,我们要搞清楚一点:什么时机是变基的时机?一般理解是推送的时候,其实不是,而是从拉取的时候就要开始变基了,因为你拉取的时候,服务器上可能已经有新代码了,所以要变基也是在这个时候,一旦发现有新基础了,则立马变掉。

所以,通常情况下,我们拉取新代码无非就是一个命令:git pull,但现在我们要变基拉取,就需要用git pull --rebase。但是每次这样执行命令就会很麻烦,而且你在vscode里也没有办法自动加这个参数,所以为了方便起见,我们就设置一下第一条命令,这样每次拉取它都会自动变基。

但是自动变基往往会带来一个额外的问题,那就是每次当你手头有正在编辑的文件的时候,它就说它无法变基,因为你的工作区不干净。为什么不变基的时候没有这个问题,而一旦选择了自动变基,工作区就必须保持干净呢?因为变基的操作原理是它需要先把你本地代码库里还没有推送的那部分提交反向释放到工作区,然后从服务器拉取新代码,再以新代码为基础把工作区里的修改附加上去,因为有这个过程,所以它必须要求你的服务区是干净的。

为此git提了两个建议:要么你把所有修改先全部都commit到本地,要么你把它们都stash保存起来。首先说,commit肯定不是一个好主意,因为很有可能这时候我们的工作做到一半,还不适合commit,如果每次pullcommit一下的话,那么分支树上会多出很多无用的节点。

那只剩下最后一个选择,就是每次pull之前都stash一下,pull完了之后再把stash的内容pop出来,但这样岂不是更麻烦?所以这里我们用第二条命令设置一下,每次rebase的时候都自动把我们工作区里的内容自动stash进去,rebase完成之后再自动恢复出来。

其余要注意的就是有冲突的时候,如果有冲突,则合并完冲突之后,执行一下git rebase --continue就好了,其它和原先的用法没有任何区别。

Node 社群

我组建了一个氛围特别好的 Node.js 社群,里面有很多 Node.js小伙伴,如果你对Node.js学习感兴趣的话(后续有计划也可以),我们可以一起进行Node.js相关的交流、学习、共建。下方加 考拉 好友回复「Node」即可。

 “分享、点赞、在看” 支持一波

两条命令让你的git轻松自动变基,学到了!相关推荐

  1. 两条命令解决移动硬盘无法弹出的问题

    自从 Windows 10 更新到 20H2 版本后,几乎每次弹出移动硬盘都要碰到 "正在使用中" 无法弹出的问题,一般基于闪存的优盘直接狠心拔了完事,但是基于传统机械结构的移动硬 ...

  2. 两条命令解决移动硬盘无法弹出的问题(转载 )

    转载自 两条命令解决移动硬盘无法弹出的问题 | 呉真的博客 自从 Windows 10 更新到 20H2 版本后,几乎每次弹出移动硬盘都要碰到 "正在使用中" 无法弹出的问题,一般 ...

  3. 两条命令!Win7本本变无线基站

    http://www.myhack58.com/Article/54/93/2010/28567.htm 两条命令!Win7本本变无线基站 来源:本站转载 作者:佚名 时间:2010-12-14 14 ...

  4. Git 分支 - rebase 变基

    变基 在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase. 在本节中我们将学习什么是"变基",怎样使用"变基",并将展示该操作的 ...

  5. git rebase(变基)—— Git 学习笔记 19

    git rebase(变基) 认识 git rebase 假设你现在基于远程分支"origin",创建一个叫"mywork"的分支. $ git checkou ...

  6. linux shell两条命令,Linux最常用的18个Shell命令

    有些人仍然会有这中愚蠢的想法,他们认为使用Linux就必须使用Linux shell命令.胡说!你可以不懂得任何Linux命令,比如说ps,grep,ls等,但是你仍然可以使用很多现代的Linux桌面 ...

  7. windows 两条命令快速关闭 445等危险端口

    最近,计算机总是显示下图的这种威胁 应该是有黑客通过端口扫描进行网络攻击. 所以关闭不必要的端口非常重要. 常用端口介绍:如何防止黑客通过端口扫描进行网络攻击? 下面介绍如何快速关闭指定端口: 1. ...

  8. 两条命令快速关闭windows 445端口

    windows 中,搜索 cmd ,然后以管理员身份运行 cmd 然后按顺序执行以下两段命令: netsh advfirewall set allprofile state onnetsh advfi ...

  9. 求两条轨迹间的hausdorff距离_自动控制原理 | 根轨迹法

    根轨迹法 | 根轨迹方程 | 绘制根轨迹 | 动态性能分析 | 主导极点 根轨迹法 分析和设计线性定常控制系统的一种图解方法(即用非解析的手段来解决高阶问题) 根轨迹:简称根迹,是开环系统某一参数从零 ...

最新文章

  1. JavaScript初学者编程题(18)
  2. java if赋值语句_Java基础第3天+运算符(算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、三元运算符)、Scanner键盘录入、if语句...
  3. M2 Spec: an update of M1 Spec
  4. CCF NOI1076 进制转换
  5. rsync增量同步标志位详细解释
  6. Vscode运行Demo程序出现错误
  7. MySQL 案例实战--MySQL数据库主从复制
  8. 小白Java求学之路之一:控制台实现用户注册、登录
  9. 浅谈web前端工程师hr面试经典问题20+
  10. html第四天网站首页的布局设计到实施
  11. 计算机的正确配置文件,显示器颜色配置文件在win10电脑中设置正确配置的方法...
  12. linux设置屏蔽海外ip,linux屏蔽海外流量的两种方法
  13. 什么是生成器?如何创建生成器
  14. 天蓝色在ps中的色值_天蓝色的cosmosdb文档中的字段级加密
  15. hahabet05-com:终于有人把云计算,大数据,人工智能讲明白了--哈哈电竞
  16. Redis 设计与实现——读书笔记
  17. 惊!brat安装后进行标注-实战,并且通过一行代码自动标注为BIO格式,便于模型训练-and 错误解决
  18. Web Atoms Crack,JavaScript 桥接器
  19. (Google)谷歌笔试算法题:要求相邻的两个数都不小于或者不大于其本身的排序
  20. linux / in_addr 的用法

热门文章

  1. 目标检测 YOLO系列算法
  2. cad lisp 二次抛物线_用Cad画二次抛物线
  3. 计算机win7等级考试试题,计算机等级考试一级win7操作题.docx
  4. DySAT: Deep Neural Representation Learning on Dynamic Graph via Self-Attention Networks
  5. 多卡汇聚路由器、多网融合、弱网通信
  6. 安卓开发:WebView无法播放微信视频
  7. android 瀑布流 github,GitHub - youxilua/waterfall4android: android瀑布流
  8. 金融应用:信用卡号的合法性验证
  9. 钉钉在线课程开启屏幕共享时电脑蓝屏问题解决办法
  10. 设定绘图区坐标轴及标题字体、字号的两种方法