1 使用背景 在使用git的时候,经常会用到一个命令,那就是git commit -m 'msg'
,但是这个msg
还是有要求的,那就是在push
代码的时候,msg
不能少于5个字符(中英文都算一个字符),但是在执行git commit
的时候,这个msg
是可以写任意个字符的,也就是说当你commit
的时候,没有写够5个字符,那么在push
的时候,就会提示不能push
,所以就需要用到修改已提交 commit
的信息。
2 方法 2.1 修改最后一次提交 commit 的信息 1 2 3 4 5 6 7 8 # 修改最近提交的 commit 信息 $ git commit --amend --message="modify message by daodaotest" --author="jiangliheng <jiang_liheng@163.com>" # 仅修改 message 信息 $ git commit --amend --message="modify message by daodaotest" # 仅修改 author 信息 $ git commit --amend --author="jiangliheng <jiang_liheng@163.com>"
2.2 修改历史提交 commit 的信息 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # 列出 rebase 的 commit 列表,不包含 <commit id> $ git rebase -i <commit id> # 最近 3 条 $ git rebase -i HEAD~3 # 本地仓库没 push 到远程仓库的 commit 信息 $ git rebase -i # vi 下,找到需要修改的 commit 记录,```pick``` 修改为 ```edit``` 或 ```e```,```:wq``` 保存退出 # 重复执行如下命令直到完成 $ git commit --amend --message="modify message by daodaotest" --author="jiangliheng <jiang_liheng@163.com>" $ git rebase --continue # 中间也可跳过或退出 rebase 模式 $ git rebase --skip $ git rebase --abort
2.3 批量修改历史 commit 信息 创建批量脚本changeCommit.sh
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 $ cat changeCommit.sh# !/bin/sh git filter-branch --env-filter ' # 之前的邮箱 OLD_EMAIL="jiangliheng@126.com" # 修改后的用户名 CORRECT_NAME="jiangliheng" # 修改后的邮箱 CORRECT_EMAIL="jiangliheng@163.com" if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ] then export GIT_COMMITTER_NAME="$CORRECT_NAME" export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL" fi if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ] then export GIT_AUTHOR_NAME="$CORRECT_NAME" export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL" fi ' --tag-name-filter cat -- --branches --tags
执行脚本成功后,强制推送到远程服务器:
1 $ git push --force --tags origin 'refs/heads/*'
Reference
写在最后 欢迎大家关注鄙人的公众号【麦田里的守望者zhg】,让我们一起成长,谢谢。