Git提交敏感信息后如何撤回

今天用工作电脑时忘记修改git用户名和邮箱,推送了一个提交到github,因为不想泄露真名和公司邮箱,所以需要撤回修改。记录一下解决这个问题需要用到的命令。

编写过程中还翻到了自己以前的旧文章:更改git仓库已经commit的用户名和邮箱信息

敏感提交是最新一条

由于很快就发现了,所以这个敏感提交是最新的一个提交,因此可以使用如下命令先撤回提交

1
git reset --soft HEAD~1

顺便也学习了一下soft选项和hard选项的区别,假设提交历史是A到B到C,想从C撤销回到B:

  • --soft选项:HEAD 指向 B,工作区和暂存区保留 C 的修改(即 C 的更改被标记为“已暂存”),可以重新修改后提交C的修改。
  • --hard选项:HEAD 指向 B,工作区和暂存区完全恢复到 B 的状态,C 的修改被永久删除。

因此一般推荐使用前者。

除了撤回来修改后再提交之外,由于本场景是需要修改提交信息而不是文件内容,还可以使用--amend选项:

1
2
3
4
5
# 修改提交信息(仅修改提交信息)
git commit --amend -m "新的提交信息"

# 或者同时修改作者名和邮箱
git commit --amend --author="New Name <new.email@example.com>"

修改完之后,强制推送到远程库,这会覆盖远程历史,虽然能消灭远程库的敏感信息,但如果对应的分支还有人在工作,一定要和对方先商量好。

1
git push origin <branch-name> --force

敏感信息在历史提交中

使用git filter-repo命令重写历史,由于我没有试过,就不在这里详写了,感兴趣的话可以搜索相关的内容。

filter-branch并不推荐(以前的文章用的是那个),比较慢而且有一些问题,用filter-repo代替

作者

憧憬少

发布于

2025-05-13

更新于

2025-05-13

许可协议