方法一:用 git rebase -i
修改提交#
rebase 到之前提交#
$ git rebase -i HEAD~15 // rebase到往前15條提交的位置
$ git rebase -i <58361c2...> // rebase 到某次特定提交
$ git rebase -i --root // 修改根提交(第一次提交)
編輯器中會列出:
pick abc1234 Initial commit
pick def5678 Add something else
...
把你想修改的第一個提交改為:
edit abc1234 Initial commit
從該提交中移除你不該提交的文件:
git reset HEAD secret.txt
git restore --staged secret.txt
git commit --amend
git rebase --continue
修改 commit#
git commit --amend
強制推送#
git push --force
方法二(替代):git filter-repo
彻底清除文件历史(適合處理多個提交中都出現的文件)#
git filter-repo
的下載不講了。
如果該文件不僅出現在第一次提交中,而且後續提交中也修改過,建議使用以下一種:
git filter-repo --path secret.txt --invert-paths
python -m git_filter_repo --path secret.txt --invert-paths --force