技術筆記-當你不小心把「秘密」發佈到 git,要如何「清乾淨」?

更新於 發佈於 閱讀時間約 8 分鐘

如題,這應該是很容易犯的錯誤,據說 git 能使時光倒流!它就是這麼厲害,所以光是刪除檔案重新 commit 是沒用的,必須執行以下步驟:

(都是 chatGPT 教的,所以本文無創新價值,單純筆記增加熟練度)

# 1. 將檔案移出納管範圍,但注意加 --cached 就不會實體刪除檔案
git rm --cached gui/MySecretFile.pfx
------------------------------------
[main 3612398] remove cert file
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 gui/MySecretFile.pfx
------------------------------------

# 2. commit 到 local repository
git commit -m "remove cert file"
------------------------------------
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 287 bytes | 287.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To https://github.com/newmanchurch/newman-console.git
2a9e44c..3612398 main -> main
---------------------------------

# 3. 同步到雲端
git push origin --force
-----------------------
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 287 bytes | 287.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To https://github.com/newmanchurch/newman-console.git
2a9e44c..3612398 main -> main
---------------------------------


# 4. 「清洗」所有歷史紀錄,指令長到爆炸
git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch gui/MySecretFile.pfx" \
--prune-empty --tag-name-filter cat -- --all
--------------------------------------------
Proceeding with filter-branch...

Rewrite 807cc8429eb6b68cf0aa63724080c4d362d4a170 (1/34) (0 seconds passed, remaining 0 predicted) rm 'gui/MySecretFile.pfx'
Rewrite bc433e86e272578c895c226c9d0e87a7a6b26a28 (2/34) (0 seconds passed, remaining 0 predicted) rm 'gui/MySecretFile.pfx'
Rewrite 6e1b5c278e171ecd87bf746da7bac9cb42102406 (3/34) (0 seconds passed, remaining 0 predicted) rm 'gui/MySecretFile.pfx'
Rewrite bcb38916c62bbc9a6d9f50870bc0c00dc8485d6d (4/34) (0 seconds passed, remaining 0 predicted) rm 'gui/MySecretFile.pfx'
...
Ref 'refs/heads/main' was rewritten
Ref 'refs/remotes/origin/main' was rewritten
--------------------------------------------

# 4.1 據說安裝一個 python 套件後,可以讓指令大幅精簡,但我沒試過:
pip install git-filter-repo
git filter-repo --path gui/MySecretFile.pfx --invert-paths


# 5. 同步到雲端
git push origin --force
-----------------------
​Enumerating objects: 219, done.
Counting objects: 100% (219/219), done.
Delta compression using up to 8 threads
Compressing objects: 100% (213/213), done.
Writing objects: 100% (219/219), 54.02 KiB | 4.50 MiB/s, done.
Total 219 (delta 151), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (151/151), done.
To https://github.com/newmanchurch/newman-console.git
+ f921b1b...07c383c main -> main (forced update)
-------------------------------------------------

到雲端網站檢查,成功清的乾乾淨淨,收工。

Newman 2024/12/10

導覽頁:紐曼的技術筆記-索引

後記:

順便筆記一些常用指令:

# 當本地端檔案改到亂掉了,就整個放棄修改,恢復到上一的 commit
git restore --source=HEAD --staged --worktree .

# 徹底放棄本地端的 repository,完全用雲端的版本來取代
# 使用時機就如本文狀況,遠端的所有歷史版本都經過清洗了,client 就不用一一清洗,直接取代
git fetch --all
git reset --hard origin/main
git pull


留言
avatar-img
留言分享你的想法!
avatar-img
newman的沙龍
24會員
118內容數
漫步是一種境界。
newman的沙龍的其他內容
2025/04/01
Reinforcement Learning (強化學習) 的理論非常有趣,可能是因為其中許多方法,與人類的學習歷程極為相似,如試錯,獎懲,改進策略,持續優化等等。現在準備來爬這座山了,我把學習階段大致分成三個小山峰,依序為 Q-Learning --> DQN --> Actor-Critic,
Thumbnail
2025/04/01
Reinforcement Learning (強化學習) 的理論非常有趣,可能是因為其中許多方法,與人類的學習歷程極為相似,如試錯,獎懲,改進策略,持續優化等等。現在準備來爬這座山了,我把學習階段大致分成三個小山峰,依序為 Q-Learning --> DQN --> Actor-Critic,
Thumbnail
2025/03/08
稍微看一下 Telegram 官方文件,哇!好強喔,功能說明的第一項赫然出現「可以取代整個網站」!口氣真的很大。雖然我的需求應該很低,但能夠確認前面是一座豐富的寶藏,還是很令人興奮的,待基本功能掌握之後,可以再評估和決定要不要往下挖。 發送訊息 要達成這第一個目標,首先必須建立一個 bot。
Thumbnail
2025/03/08
稍微看一下 Telegram 官方文件,哇!好強喔,功能說明的第一項赫然出現「可以取代整個網站」!口氣真的很大。雖然我的需求應該很低,但能夠確認前面是一座豐富的寶藏,還是很令人興奮的,待基本功能掌握之後,可以再評估和決定要不要往下挖。 發送訊息 要達成這第一個目標,首先必須建立一個 bot。
Thumbnail
2025/03/01
Line Notify 即將停止服務,隨著時間越來越緊迫,隱約聽到許多人在哀嚎。印象中有許多廠商,把 Line Notify 用得淋漓盡致,甚至可以一個客戶建一個群組,把許多客製化服務都用程式管理的井井有條,得到很好的滿意度。但這種好康,無限免費的即時訊息,沒有了,時間就在 2025/3/31!公告
Thumbnail
2025/03/01
Line Notify 即將停止服務,隨著時間越來越緊迫,隱約聽到許多人在哀嚎。印象中有許多廠商,把 Line Notify 用得淋漓盡致,甚至可以一個客戶建一個群組,把許多客製化服務都用程式管理的井井有條,得到很好的滿意度。但這種好康,無限免費的即時訊息,沒有了,時間就在 2025/3/31!公告
Thumbnail
看更多
你可能也想看
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
如題,這應該是很容易犯的錯誤,據說 git 能使時光倒流!它就是這麼厲害,所以光是刪除檔案重新 commit 是沒用的,必須執行以下步驟: # 1. 將檔案移出納管範圍,但注意加 --cached 就不會實體刪除檔案
Thumbnail
如題,這應該是很容易犯的錯誤,據說 git 能使時光倒流!它就是這麼厲害,所以光是刪除檔案重新 commit 是沒用的,必須執行以下步驟: # 1. 將檔案移出納管範圍,但注意加 --cached 就不會實體刪除檔案
Thumbnail
在進行Electron 專案時,後端夥伴選擇將 sqlite 資料庫跟專案檔打包成一個執行檔。在開發過程中,前端的操作經常會更動到 db的資料,此時 Git 就會追蹤到 db 的變化,因此前端在推送檔案到遠端 repo 前,會需要將其移出 Git 追蹤範圍,該怎麼做?
Thumbnail
在進行Electron 專案時,後端夥伴選擇將 sqlite 資料庫跟專案檔打包成一個執行檔。在開發過程中,前端的操作經常會更動到 db的資料,此時 Git 就會追蹤到 db 的變化,因此前端在推送檔案到遠端 repo 前,會需要將其移出 Git 追蹤範圍,該怎麼做?
Thumbnail
最近在找資料的時候,偶然發現了兩個有趣的 git 指令:git commit --fixup 和 git rebase -i <sha> --autosquash。 研究了下發現對於像我這種每次 commit 都要斤斤計較,盡可能完美的人來說非常好用,因此寫一篇筆記記錄一下用法。
Thumbnail
最近在找資料的時候,偶然發現了兩個有趣的 git 指令:git commit --fixup 和 git rebase -i <sha> --autosquash。 研究了下發現對於像我這種每次 commit 都要斤斤計較,盡可能完美的人來說非常好用,因此寫一篇筆記記錄一下用法。
Thumbnail
每個人的寫作習慣不一樣,我的習慣是每章分開存檔,除了方便查看外,檔案間也不會互相影響。另外就是,發佈文章時,能夠快速的生成章節目錄,方便快速的進行作業。 而要做到這點,也非常的容易,只要打開記事本,輸入六字符(只佔兩個中文字),並自訂檔名,最後於存檔前,將副檔名 .txt 改為 .bat 檔,
Thumbnail
每個人的寫作習慣不一樣,我的習慣是每章分開存檔,除了方便查看外,檔案間也不會互相影響。另外就是,發佈文章時,能夠快速的生成章節目錄,方便快速的進行作業。 而要做到這點,也非常的容易,只要打開記事本,輸入六字符(只佔兩個中文字),並自訂檔名,最後於存檔前,將副檔名 .txt 改為 .bat 檔,
Thumbnail
您是否苦於網路資訊爆炸嗎? 教學何其多,但卻無法好好選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。 我們開發程式的時候, 常常會使用Git來管理我們的
Thumbnail
您是否苦於網路資訊爆炸嗎? 教學何其多,但卻無法好好選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。 我們開發程式的時候, 常常會使用Git來管理我們的
Thumbnail
科技力 硬碟清除大解密-3種資料清除工具守護您的資訊安全 當您計畫處理或售出您的舊硬碟或電腦時,您必須確保您的個人資料得以妥善處理,以免敏感資料不慎流落至不當之處。本文將深入介紹如何有效進行硬碟資料清除,確保您的資訊永久無法恢復。我們將探討各種不同的硬碟清除方式、選擇適合的工具和軟體,並提供清除
Thumbnail
科技力 硬碟清除大解密-3種資料清除工具守護您的資訊安全 當您計畫處理或售出您的舊硬碟或電腦時,您必須確保您的個人資料得以妥善處理,以免敏感資料不慎流落至不當之處。本文將深入介紹如何有效進行硬碟資料清除,確保您的資訊永久無法恢復。我們將探討各種不同的硬碟清除方式、選擇適合的工具和軟體,並提供清除
Thumbnail
有關 git add, git commit, git push
Thumbnail
有關 git add, git commit, git push
Thumbnail
事情是這樣發生的,由於直播班第二週和第三週的作業內容很相似,於是我就把第二週的作業資料夾「複製」了一份,作為第三週的基底,並把第三週的作業內容完成後,準備上傳到一個新建的 week3 遠端 repository ...
Thumbnail
事情是這樣發生的,由於直播班第二週和第三週的作業內容很相似,於是我就把第二週的作業資料夾「複製」了一份,作為第三週的基底,並把第三週的作業內容完成後,準備上傳到一個新建的 week3 遠端 repository ...
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News