在开发过程中,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……