快速批量修改Git提交注释方法
纠结这个问题的原因还是——完美主义造成的格式问题。很久以前Kaijia一直在用Word的格式,即英文和中文之间没有空格填写提交注释,今年暑假看了微软的设计规范文档之后Kaijia开始采用英文和中文之间有空格的形式。所以这次Kaijia将原来储存在SVN中的内容导入到Git时特纠结打算将之前的格式全部换过来。于是Google了一下批量修改Git提交注释的方法。
一开始还没有找到,当然主要原因还是一般人只会遇到需要修改最近的一条注释的情况,仔细重新看了一遍后在一篇Stack Overflow中的一个非最受欢迎答案中找到了方法。
首先需要衍合到需要修改的提交的上一个提交(Parent Commit):
1 |
git rebase --interactive 需要修改的提交的上一个提交 |
在弹出的Rebase文本编辑器中将会显示所有在修改范围内的提交,将需要的修改的提交前的pick改为reword(老版本Git为edit),编辑保存后Git将会自动弹出新的文本编辑器,此功能类似使用git commit –amend,这时你只需要修改第一行的注释并保存更改,之后修改将会被自动应用。在较旧版本的Git中你可能需要运行:
1 2 |
git commit --amend git rebase --continue |
以继续更改。这时就已经完成批量修改了,但是因为经过了Rebase重建,所有提交的提交时间戳(Commit Timestamps)都变成了最新修改的时间,因此需要将时间更换为原始的作者时间(Author Time)。这个操作的详细讨论可以在这篇Stack Overflow中找到,最快速的方法就是运行:
1 |
git filter-branch --env-filter 'GIT_COMMITTER_DATE=$GIT_AUTHOR_DATE; export GIT_COMMITTER_DATE' |
这样所有的提交时间戳就会变会原始提交时间。当然完成造作之后需要强制提交到远程的Repo:
1 |
git push -u origin master --force |
注意:在一个团队开发项目中,批量更改早前的提交注释绝对不是这么简单,你需要提前通知所有人并且所有人都因此而需要重新更新本地的Git,所以并不建议在大项目中执行此操作。
评论