精準入口==>官方文檔
Q:我們在提交代碼時,把密碼或者敏感信息也提交了,怎么辦?
A:“在本地刪除密碼或敏感信息后,再push到遠程倉庫”
Q:"但這樣刪除后,在倉庫的commit歷史中,還是能看到密碼呀?"
A:“那就刪除commit歷史, 但是怎么刪呢。。。?!?/p>
B:"Using filter-branch"
首先,
進入到本地目錄,執(zhí)行 git filter-branch, 強制( --force) git對所有分支和tag的歷史記錄(--tag-name-filter cat -- -all)執(zhí)行命令,
但是不需要check out(--index-filter)這些歷史記錄.
執(zhí)行的命令是 從歷史記錄中刪除指定文件(git rm --cached --ignore-unmatch 文件名稱)的內(nèi)容和空提交(--prune-empty)
如果刪除的是目錄,需使用(`git rm -r --cached --ignore-unmatch 目錄名稱`)
執(zhí)行命令, 刪除文件在本地的提交歷史:
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch 文件' --prune-empty --tag-name-filter cat -- --all
然后,
(可選)把文件名加入到.gitignore文件中, 以后提交時,會被過濾掉,防止以后不小心又把敏感數(shù)據(jù)提交到代碼倉庫中
echo 文件名 >> .gitignore
git add 文件名
git commit -m "提交時忽略xxxx文件"
最后,
將修改提交到遠程倉庫,遠程倉庫的commit歷史將被修改
git push origin --force --all
如果tag中也需要刪除敏感數(shù)據(jù),則執(zhí)行
git push origin --force --tags
告訴同事, rebase 之前拉取的倉庫, 不要merge, 因為merge后提交,會把之前清除的敏感文件又提交到倉庫里。
rebase 會先把本地提交的記錄打補丁,然后把本地倉庫更新成和遠程相同,然后再應(yīng)用補丁。
merge 是合并, 本地已有的敏感數(shù)據(jù)還在,遠端倉庫沒了。