rebase vs squash,一个我认为比较直观的例子
rebase vs squash,一个我认为比较直观的例子
页面内有广告,如果你看不到说明你在用广告拦截插件,为了网站能够持续运营,请顺手将本网站加到广告拦截白名单中,感谢!
记录一下在进行 git 操作时,想到了一个能直观表现关于 rebase 和 squash 这两个操作的不同之处的例子。
先说概念:
rebase, reapply commits,也就是重放之前的 commit 记录
squash,combine multiple commits into a single one, 也就是把一堆commit组合成单个commit,只保留最终的变更结果,不保留中间的提交过程。
这个直观的例子是这样的,假设你有一个 main 分支,里面有一个文件,内容是数字 0.
此时你切出了一个 dev 分支,你在 dev 分支上做了 9 次提交:
前 7 次都是给这个数字 +1,后 2 次给这个数字 -1,此时你在 dev 分支上,这个数字是 5,而你有了 9 个提交记录,记录了你的这 7 次 +1 操作和 2 次 -1 操作。
这时如果你做一个 rebase merge 到 main 分支,那么 main 分支也会出现这 9 次提交,数字会先依次加到 7 再减到 5
如果你做的是一个 squash merge 到 main 分支,那么 main 分支只会出现一次提交,就是把数字 0 直接变成数字 5,看不到你在 dev 分支上做的加加减减操作,直接看到的就是基础节点(数字 0)和当前节点(数字 5)的差异(+5)。
所以,rebase 和 squash,取决于你想不想把提交记录保留到目标分支上。
毕竟是程序员,偶尔也应该分享点技术文😂