1. git commit –amend
如果仅仅想修改刚刚的提交(最后一个提交),可以使用git commit --amend
修改最后一次提交。使用该命令时会弹出对话框(windows下)或者vim编辑界面(linux下)。在弹出界面进行修改,保存后即可用新的提交信息进行提交了。该命令只能修改提交备注信息,对于其他信息无法修改。
2. git reset –soft head^
该命令会回滚最后一个提交,执行一次表示回滚最近一次提交。然后改动会进入暂存区,可以使用git commit -m
继续提交即可。
3. git rebase
上面两个命令都是针对最近一次提交,如果想同时修改多个提交,怎么办? git rebase -i 提交号
(修改该提交号之后的所有提交) 或 git rebase -i HEAD~3
(修改最近三次的提交)。使用了该命令后,会将所有需要修改的commit的提交信息按照时间先后顺序列出来。示例如下:
pick 52e5cd9 .test1
pick 76dfaf3 .test2
pick d178473 .test3
# Rebase 080e4be..d178473 onto 080e4be
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
我们只需要编辑这段脚本即可,git提供了6个命令,具体如下:
- p(pick):使用提交 (默认)
- r(reword):使用提交,但要修改提交信息(使用r的提交,在保存并退出该脚本后会依次弹出界面修改每一个提交信息)
- e(edit):使用提交,但是中断让用户修改,在终端时可以使用
git commit --amend
来修改 - s(squash):将当前提交和前一个提交压缩为一个提交,该合并后的提交使用前一个提交的作者信息
- f(fixup):将当前提交和前一个提交压缩为一个提交,并丢弃当前的提交信息,使用前一个的提交信息
- x(exec):在处理该提交的时候需要执行的命令语句
4. git filter-branch
该命令能对该仓库的所有提交进行修改,功能非常强大。比如批量修改提交者的信息,如修改所有提交者为zhangsan提交信息为gavincook,邮箱为xx@qq.com,我们可以使用如下命令:
git filter-branch --commit-filter '
if [ "$GIT_AUTHOR_NAME" = "zhangsan" ];
then
GIT_AUTHOR_NAME="GavinCook";
GIT_AUTHOR_EMAIL="xx@qq.com";
git commit-tree "$@";
else
git commit-tree "$@";
fi' HEAD
git提供了很多filter类型,更多例子参见:例子