git - 写一下吧, git rebase, git squash 的使用
访问量: 767
当年还是在北京,2010~2012的摩托罗拉的日子。工资拿的少,自己又不是employee, 小杂鱼一条。
不过当时的日子非常怀念,一切都很恬静,优先,很多小美好。
当时的老板(高勇)说,需要在合并代码的时候rebase, 外加squash (这个单词是我10年后才想起来的 xx_uash ,搜了一下才知道是squash) ,当时完全无法理解这个机制
现在用上了,记录一下吧。
refer to: https://stackoverflow.com/questions/5189560/squash-my-last-x-commits-together-using-git
如果远程和本地分别有2个分支: my_branch, master。
那么,假设我此时在 local my_branch上做开发, 远程master上发生了不断的提交。 例如100个。
此时,如果我更新local my_branch, (
git checkout master
git pull origin master:master
git checkout my_branch
git merge master
git rebase master
就会发现:
1. 自己的my_branch上的提交都排在了最上面
2. 自己的my_branch上的提交的时间点,很可能是老旧的但是却排在上面的X个提交中。
这样会产生:
每次git merge master的时候,都要手动rebase , 很痛苦。
所以解决办法: 使用squash 把最新的N个提交做合并。
方法1:
git rebase --autosquash develop # rebase的时候直接做了squash的操作(待验证)
方法2: 手动squash
git rebase -i HEAD~10 ( -i 表示interactive 模式, HEAD~10表示把最近的10个commit做rebase)
然后,会看到这个编辑页面:
pick commit-05-24 pick commit-05-25 pick commit-05-26 pick commit-05-27 (注意上面的时间线,从上到下是 时间的从老到新)
然后, 我们编辑该列表, 第一个 pick 保留不变, 下面的都把pick 替换成squash即可
pick commit-05-24 s commit-05-25 s commit-05-26 s commit-05-27
保存,就会看到rebase开始了,最后让我们输入commit
最后,你的log 看起来就是,原本最上面的10个commit , 现在合并成了一个了。
希望老潘身体早点好起来。