1. 程式人生 > >徹底清除Github上某個檔案的歷史(針對誤上傳密碼檔案等情況)

徹底清除Github上某個檔案的歷史(針對誤上傳密碼檔案等情況)

這幾天用JDBC寫一個開源專案玩,測試的時候為了方便連線資料庫就直接把root密碼都寫進程式碼檔案了,然後Commit再Sync,成功把密碼暴露到Github上。

大家肯定不想自己資料庫所在伺服器的IP和密碼暴露,所以這裡提供3個辦法:
1. 把Github上整個專案刪了重新建立並上傳不含密碼的程式碼,這個對已經維護過很久的專案是致命的,此乃下策;
2. 直接把資料庫密碼改了,暴露就暴露唄,別人看見了也連不上,此乃中策;
3. 上策也就是我們今天要說的了,Github for Windows/Mac桌面應用以及網頁版都沒有提供清除某個檔案操作記錄的功能,就是說即便你刪了這個檔案重新Push,那麼別人依然可以檢視你上一個版本。所以我們需要的是把和這個檔案有關的所有Commit等記錄全部刪掉當然也包括檔案本身。
首先在Git Bash或者CMD或者PowerShell中cd進入到你的本地專案資料夾,然後依次執行下面6行命令

即可:

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch FILE_PATH' --prune-empty --tag-name-filter cat -- --all

git push origin master --force

rm -rf .git/refs/original/

git reflog expire --expire=now --all

git gc --prune=now

git gc --aggressive --prune=now

注意上面的FILE_PATH要是路徑而不只是檔名字,


例如src/main/java/com/ysy/demo/filename.java