Git新手,测试的时候提交了一堆记录,有洁癖看了总是不爽,而且换了个git托管商提交记录居然还在,只能找资料按教程一步步删除了。
比如提交了:

test3
test2
test1

删除提交记录及更改

1
2
3
git reset --hard HEAD^  #删除最后1次的提交记录
git reset --hard HEAD~2 # 删除最近2次提交
git push --force #已经提交到远程仓库了,那就需要这个命令将本地库强行同步到远端库覆盖掉

删提交记录但保留更改

需要用到下面的命令:

1
git rebase -i <upstream>  #<upstream>为需要删除的提交的前一个提交

上面命令执行完会自动打开Interactive Rebase,将pick test2 那行改成squash, 保存退出. 之后可能 git 会提示出现conflict,根据提示完成处理。

squash的意义解释: meld into previous commit, 也就是"熔入前一个提交中", 所以是先 pick a, 使用 a 提交, 然后 squash b, 把 b 熔入前一个提交中.
在 rebase 保存退出后, 随后的提示信息是由 squash 命令触发的, 此时你可以对熔合后的 commit message 进行编辑, 而不需要在结束后 git commit --amend.

作者:黄鋆
链接:https://www.zhihu.com/question/22132675/answer/20420691

接着就是把本地内容 Force Push 到远端完成

1
git push -f #执行强制推送

再看提交记录,果然是清爽多了.