git 合并多个 commit

有个 JAVASEO 项目,由于种种原因前前后后拖了三个月,下周一上线,于是打算合到 master 上。可当合并时才记起,我都在 test_branch 分支上开发了,一开始从主分支派生的分支没用到,同时由于历史原因,这个测试分支和主分支不同步,不能直接合并。

出现问题了,就得解决问题。于是我就祭出了之前看的 rebase 合并多个 commit 的技巧,具体是这样的,先查看这期需求开始到现在工提交了多少个 commit

$ git log --oneline --since "3 months ago" | wc -l
36

36 个,于是开始了我的表演, rebase36 提交,合并成一个

 git rebase -i HEAD~36

git 合并多个 commit
pick 改为 s ,也就是 squash 的缩写,意思是 git 会应用这个补丁,但会与之前的提交合并

:%s/^pick/s/g

同时保留最上面的 pick ,意思是 git 会应用这个补丁,以同样的提交信息(commit message)保存提交,然后 wq 保存,Rebasing 后会弹出个窗口,修改下提交,不过太长了,我懒得修改了,因为这些提交说明就是这次需求的点,继续 wq 保存。

git 合并多个 commit
到这里就成功的把 36 个合成了 1commit,把分支切到 master 上,然后 git cherry-pick 那个 commit-id 即可。