这几天做开源项目,项目负责人对commits要求很高,故总结了合并/拆分commits以及修改提交信息等相关.

1. 对多个commits合并

首先查看历史信息

1
git log --oneline

想合并前两条

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

将第二条的pick改成squash

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

使用git push提交(视情况加-fforce)

2. 对单个commits拆分

以合并的结果做拆分演示

想拆分第一条

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

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

发现此时属于rebase阶段

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

使用git addgit 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
7
git 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信息