git刪除提交歷史


精准入口==>官方文檔

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 是合並, 本地已有的敏感數據還在。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM