Back

git - 写一下吧, git rebase, git squash 的使用

发布时间: 2022-05-27 05:16:00

当年还是在北京,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 , 现在合并成了一个了。

希望老潘身体早点好起来。

Back