Git-永久刪除某個重要文件或文件夾 (包括歷史記錄) 強制

有些時候不小心上傳了一些文件(例如密碼), 或者不想上傳的文件(沒及時或忘了加到.gitignore里的),

而且上傳的文件又特別大的時候, 這將導(dǎo)致別人clone你的代碼或下載zip包的時候也必須更新或下載這些無用的文件,

因此, 我們需要一個方法, 永久的刪除這些文件(包括該文件的歷史記錄).

首先, 可以參考 github 的幫助:

https://help.github.com/articles/remove-sensitive-data

步驟一: 從你的資料庫中清除文件

以Windows下為例(Linux類似), 打開項目的Git Bash,使用命令:

$ git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch path-to-your-remove-file' --prune-empty --tag-name-filter cat -- --all

其中, path-to-your-remove-file 就是你要刪除的文件的相對路徑(相對于git倉庫的跟目錄), 替換成你要刪除的文件即可. 注意一點腕巡,這里的文件或文件夾吧秕,都不能以 '/' 開頭六荒,否則文件或文件夾會被認為是從 git 的安裝目錄開始棚壁。

如果你要刪除的目標不是文件夫晌,而是文件夾咽筋,那么請在 git rm --cached' 命令后面添加 -r 命令距误,表示遞歸的刪除(子)文件夾和文件夾下的文件宪拥,類似于rm -rf` 命令信夫。

此外窃蹋,如果你要刪除的文件很多, 可以寫進一個sh文件批量執(zhí)行, 如果文件或路徑里有中文, 由于MinGW或CygWin對中文路徑設(shè)置比較麻煩, 你可以使用通配符號, 例如: sound/music_.mp3, 這樣就把sound目錄下以music_開頭的mp3文件都刪除了.

例如這樣, 新建一個 bash 腳本文件,del-music-mp3.sh:

$ git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch projects/Moon.mp3' --prune-empty --tag-name-filter cat -- --all

$ git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch sound/Music_*.mp3' --prune-empty --tag-name-filter cat -- --all

如果你看到類似下面這樣的, 就說明刪除成功了:

Rewrite 48dc599c80e20527ed902928085e7861e6b3cbe6 (266/266)

Ref 'refs/heads/master' was rewritten

如果顯示 xxxxx unchanged, 說明repo里沒有找到該文件, 請檢查路徑和文件名是否正確.

注意: 補充一點, 如果你想以后也不會再上傳這個文件或文件夾, 請把這個文件或文件夾添加到.gitignore文件里, 然后再push你的repo.

步驟二: 推送我們修改后的repo

以強制覆蓋的方式推送你的repo, 命令如下:

$ git push origin master -f

這個過程其實是重新上傳我們的repo, 比較耗時, 雖然跟刪掉重新建一個repo有些類似, 但是好處是保留了原有的更新記錄, 所以還是有些不同的. 如果你實在不在意這些更新記錄, 也可以刪掉重建, 兩者也差不太多, 也許后者還更直觀些.

執(zhí)行結(jié)果類似下面:

Counting objects: 4669, done.

Delta compression using up to 4 threads.

Compressing objects: 100% (4352/4352), done.

Writing objects: 100% (4666/4666), 35.16 MiB | 51 KiB/s, done.

Total 4666 (delta 1361), reused 0 (delta 0)

To https://github.com/defunkt/github-gem.git

  • beb839d...81f21f3 master -> master (forced update)

為了能從打了 tag 的版本中也刪除你所指定的文件或文件夾静稻,您可以使用這樣的命令來強制推送您的 Git tags:

$ git push origin master --force --tags

步驟三: 清理和回收空間

雖然上面我們已經(jīng)刪除了文件, 但是我們的repo里面仍然保留了這些objects, 等待垃圾回收(GC), 所以我們要用命令徹底清除它, 并收回空間.

命令如下:

$ rm -rf .git/refs/original/

$ git reflog expire --expire=now --all

$ git gc --prune=now

Counting objects: 2437, done.

Delta compression using up to 4 threads.

Compressing objects: 100% (1378/1378), done.

Writing objects: 100% (2437/2437), done.

Total 2437 (delta 1461), reused 1802 (delta 1048)

$ git gc --aggressive --prune=now

Counting objects: 2437, done.

Delta compression using up to 4 threads.

Compressing objects: 100% (2426/2426), done.

Writing objects: 100% (2437/2437), done.

Total 2437 (delta 1483), reused 0 (delta 0)

現(xiàn)在你再看看你的.git目錄文件大小是不是變小了.

PHP技術(shù)問答群QQ, 互相幫助警没,學(xué)習(xí)成長。

歡迎樂于助人的大神和新朋友振湾。

溫馨提醒杀迹,提問前請先百度,閱讀《智慧的提問》

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末押搪,一起剝皮案震驚了整個濱河市树酪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌大州,老刑警劉巖续语,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異厦画,居然都是意外死亡疮茄,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門根暑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來力试,“玉大人,你說我怎么就攤上這事排嫌』眩” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵躏率,是天一觀的道長躯畴。 經(jīng)常有香客問我民鼓,道長薇芝,這世上最難降的妖魔是什么蓬抄? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮夯到,結(jié)果婚禮上嚷缭,老公的妹妹穿的比我還像新娘。我一直安慰自己耍贾,他們只是感情好阅爽,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著荐开,像睡著了一般付翁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上晃听,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天百侧,我揣著相機與錄音,去河邊找鬼能扒。 笑死佣渴,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的初斑。 我是一名探鬼主播辛润,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼见秤!你這毒婦竟也來了砂竖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鹃答,失蹤者是張志新(化名)和其女友劉穎晦溪,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挣跋,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡三圆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了避咆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舟肉。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖查库,靈堂內(nèi)的尸體忽然破棺而出路媚,到底是詐尸還是另有隱情,我是刑警寧澤樊销,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布整慎,位于F島的核電站脏款,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏裤园。R本人自食惡果不足惜撤师,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拧揽。 院中可真熱鬧剃盾,春花似錦、人聲如沸淤袜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铡羡。三九已至积蔚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間烦周,已是汗流浹背尽爆。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留论矾,地道東北人教翩。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像贪壳,于是被迫代替她去往敵國和親饱亿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容