精准入口==>官方文檔
Q:我們在提交代碼時,把密碼或者敏感信息也提交了,怎么辦?
A:“在本地刪除密碼或敏感信息后,再push到遠程倉庫”
Q:"但這樣刪除后,在倉庫的commit歷史中,還是能看到密碼呀?"
A:“那就刪除commit歷史, 但是怎么刪呢。。。。”
B:"Using filter-branch"
使用方法
1.進入到本地目錄
2-1.如果刪除文件, 執行如下命令,刪除該文件在本地的提交歷史:
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch 你的文件的完整名稱" --prune-empty --tag-name-filter cat -- --all
2-2.如果刪除目錄, 執行如下命令,刪除該目錄在本地的提交歷史:
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch 你的目錄的完整名稱" --prune-empty --tag-name-filter cat -- --all
該命令會強制( --force) git對所有分支和tag的歷史記錄(--tag-name-filter cat -- -all)執行命令,但是不需要check out(--index-filter)這些歷史記錄.
該命令會從歷史記錄中刪除指定文件("git rm --cached --ignore-unmatch 你的文件的完整名稱")的內容, 並且會刪除空提交(--prune-empty)
3.(可選)把文件名加入到.gitignore文件中, 以后提交時,會被過濾掉,防止以后不小心又把敏感數據提交到代碼倉庫中
echo 文件名 >> .gitignore
git add . git commit -m "提交時忽略xxxx文件"
4-1.將修改強制提交到遠程倉庫,遠程倉庫的commit歷史將被修改
git push origin --force --all
4-2.如果tag中也需要刪除敏感數據,則執行
git push origin --force --tags
5.通知各位同事, pull最新的代碼, 並使用它做rebase. 在rebase沒完成前, 不要把老代碼merge回倉庫, 因為merge會把之前清除的敏感文件又提交回倉庫里.
rebase 會先把本地提交的記錄打補丁,然后把本地倉庫更新成和遠程相同,然后再應用補丁。
merge 是合並, 本地已有的敏感數據還在。