这几天做开源项目,项目负责人对commits要求很高,故总结了合并/拆分commits以及修改提交信息等相关.
1. 对多个commits合并
首先查看历史信息
1
git log --oneline

想合并前两条
1
2
3git rebase -i Head~2
// 或者
git rebase -i 33bda27 // 前一条

将第二条的pick改成squash

保存, 修改提交信息, 再保存,查看git log --oneline, 确认修改完成

使用git push提交(视情况加-fforce)
2. 对单个commits拆分
以合并的结果做拆分演示

想拆分第一条
1
2
3git rebase -i Head~1
// 或者
git rebase -i 33bda27 // 前一条

将第一条的pick改成edit, 后保存并退出

发现此时属于rebase阶段

1 | git reset HEAD^ // 拉取之后的提交到版本库的文件到暂存区, 改操作不影响工作区 |

使用git add和git commit分文件进行提交, 生成不同的commits
提交完成后使用git rebase --continue, 完成rebase.
使用git push提交(视情况加-fforce)
3. 更改作者信息
上述rebase步骤中加入1
git commit --amend --author "aaa <bbb@cc.com>" // 要修改的作者名字和邮箱
4. 如何rebase第一条(root)
上述rebase起始步骤中加入1
git rebase -i --root// 要修改的作者名字和邮箱
PS:如果想修改root的提交信息呢1
2
3
4
5
6
7git checkout <sha1-of-root> // checkout到第一条
git commit --amend --author "aaa <bbb@cc.com>" // 要修改的作者名字和邮箱
// OR
git commit --amend --reset-author
git rebase --onto HEAD HEAD master
5. one more thing
git commit加-s参数可以加上Signed-off-by信息