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 | # 修改提交信息(仅修改提交信息) |
修改完之后,强制推送到远程库,这会覆盖远程历史,虽然能消灭远程库的敏感信息,但如果对应的分支还有人在工作,一定要和对方先商量好。
1 | git push origin <branch-name> --force |
敏感信息在历史提交中
使用git filter-repo
命令重写历史,由于我没有试过,就不在这里详写了,感兴趣的话可以搜索相关的内容。
filter-branch并不推荐(以前的文章用的是那个),比较慢而且有一些问题,用filter-repo代替