修改老旧的 commit message

$ git rebase -i <commitid>
# 然后使用 r 修改 commit message

git rebase -i [startpoint] [endpoint][startpoint] [endpoint] 是指定一个编辑区间,如果不指定 [endpoint],则改区间的终点默认为当前分支 HEAD 所指向的 commit。且该区间指定的是一个前开后闭 (startpoint, endpoint]的区间。

把连续的多个 commit 合并成一个

$ git rebase -i <commitid>
# 然后使用 s 将需要合并的 commit 合并到最上面 pick 所在的 commit

把间隔的几个 commit 合并成一个

$ git rebase -i <commitid>
# 可以将未显示的手动添加
# 更换需要合并的 commit 的位置,执行 squash

修改最新的 commit message(提交信息出错)

$ git commit --amend
# 或者
$ git commit --amend -m '<commit message>'

git commit --amend 命令严格来说应该是代替(或者说修改)上一次提交,不仅仅只是修改 message,而是会将暂存区的内容生成一个新的 commit,再将当前最新的 commit 替换成上一提交的那一个。

除此之外,漏提交也可以使用该命令。遗漏提交部分更新,再次 commit 时,会出现两次 commit。这不是我们想要的。可以使用 git commit --amend --no-edit

$ git add <filename>
$ git commit --amend --no-edit # 在不更改提交消息的情况下修改提交-

推送空提交 empty commit

不添加任何暂存文件的情况下向分支推送一个空提交

$ git commit --allow-empty -m “Message”

将以 commit 的文件回退

$ git reset --soft HEAD^

**HEAD^**表示回退到上一个提交。

**--soft**选项表示保留对文件的修改,将这些修改放入暂存区域。