rebase可以合并压缩commit
假设当前有4次commit,分别为
commit b00098b9c53c79a7bd6997b737e12aa8378e8d8c
Author:
Date: Mon Feb 12 10:19:41 2018 +0800
modify 4
commit cd9827509576771dd1f9ad946faebc75d81073ae
Author:
Date: Mon Feb 12 10:19:33 2018 +0800
modify 3
commit 592f9a95b1790816ec9fc6eaf9b8781f7fd1b6de
Author:
Date: Mon Feb 12 10:19:25 2018 +0800
modify 2
commit 30999b3b06a1b9508aed574a3e5f73052800292a
Author:
Date: Mon Feb 12 09:26:01 2018 +0800
modify
1) git rebase -i HEAD~3
其中合并的commit为最新的(HEAD指向)3次commit
2) git rebase -i 30999b
选择 30999b
commit之前的所有commit (不包含30999b
)
常用的合并策略有三种,分别为:
1) pick
使用当前的commit,不会被合并
2) reword
使用当前的commit,不会被合并,并且可以编辑commit信息
3) squash
合并当前commit至之前的commit (提交时间在当前commit之后的commit)
所以在此场景下,我们只需要修改第二和第三个commit为squash即可与最新的提交30999b
进行合并。
保存退出之后,必须使用 (我这里直接自动进行了continue,不许输入以下命令)
git add .
git rebase --continue
来应用这次合并。假如想要放弃之前的合并,则需要
git rebase --abort
来取消。
之后通过
git push -f
来推送到远程分支。