git merge --squash


在开发过程中,git squash merge 是个比较低频使用的命令,这也是一个比较危险的命令(操作 git 记录),如果你不明白他的真实用途,建议不要使用。

场景

如果你在gitlab合并分支提交的时候勾选了squash选项,那么你的多个git提交记录会被合成一个提交记录,默认的提交名称变为Merge branch 'branch-d' into 'master'

结果

  • 你的代码确实被合入了主分支,但是commit记录全丢
  • 如果你继续用本地分支提交代码,你会发现,我自己和自己冲突了,what fuck ????

原因

git squash 就是用来改写提交记录,压缩commit的,这就是它本来的用法鸭~,错的不是git,错的是你。。。。你不该选择 git merge –squash 。

master 视角

branch e 视角

上图 Branch e 被合入 master 分支,Branch e 有多个提交,被压缩成一个提交。这个提交是一个全新的提交,和 Branch e 没有任何关系,hash 也完全不同。所以现在masterBranch e 是两条平行线。这就解释了为啥自己和自己冲突,因为master,确实多了commit记录,但是因为 hash 完全不同,没办法和其他分支做关联。如果需要出现交汇点,你需要从 master 再 merge 到 branch e

是不是觉得git太不人性化了,太蠢了?em……


 上一篇
ts 方法装饰器 ts 方法装饰器
装饰器在java中叫注解,体现了面向切面(AOP)的编程思想。 方法装饰器// 定义装饰器 export function logger(target: any, propertyKey: string, descriptor: Prop
2021-07-12
下一篇 
在 uniapp 中使用小程序ui组件库(mini-ali-ui-rpx) 在 uniapp 中使用小程序ui组件库(mini-ali-ui-rpx)
uniapp 提供了很多开箱即用的特性,但是业务开发中,好像很少使用原生的小程序组件,这个特性是支持的。从 uniapp 开发者角度,支持原生小程序特性有利于开发者对现有的小程序做快速迁移,能够兼容社区绝大多数 ui 组件库。 引入小程序组
2021-06-17
  目录