git刪除提交歷史

精準入口==>官方文檔

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ù)還在,遠端倉庫沒了。

摘自<git刪除提交歷史>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Git是目前最流行的版本管理系統(tǒng),也是最先進的分布式版本控制系統(tǒng)(distributed version cont...
    pro648閱讀 5,951評論 1 17
  • Add & Commit git init 初始化一個 Git 倉庫(repository),即把當前所在目錄變成...
    冬絮閱讀 5,125評論 0 9
  • git常用命令 GIT常用命令備忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章閱讀 8,855評論 1 26
  • 前幾天發(fā)文章找不到合適的歌,朋友說你去聽聽樸樹吧。 一聽,便聽了他十八年來所有的歌。 不多,三十多首,湊不夠一場演...
    二喜的深夜食堂閱讀 4,494評論 42 195
  • 生活總是有些出其不意,有時候你費盡心機卻得不到,說不定就是在某個時間點,你想要解開的死結(jié)就突然通順了。 我的朋友圈...
    艾薇00閱讀 238評論 0 0

友情鏈接更多精彩內(nèi)容