2017-06-16 72 views
1

我在本地Git存儲庫中有約50次提交。在最初的提交中,我已經包含.idea文件夾,現在我必須從初始提交中刪除該文件夾中的所有文件。有沒有可能做到這一點?從以前的所有git提交中刪除.idea目錄

我曾嘗試下面的命令,但轉換爲不同的提交沒有鏈接到以前提交:

$ echo '.idea' >> .gitignore 
$ git rm -r --cached .idea 
$ git add .gitignore 
$ git commit --amend 
+0

修訂git的歷史是很危險的東西。一旦你已經承諾並被推動,除非你準備做一些回購手術,否則它或多或少就會陷入僵局。 – Adrian

回答

2

您可以使用filter-branch做到這一點:

cp -r .idea .idea.bak 
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch -r .idea' --prune-empty --tag-name-filter cat -- --all 

這將從所有過去刪除.idea提交。 在此之後,您可以像更新那樣更新.gitignore文件,以免錯誤地添加.idea

請注意,這會重寫您的存儲庫的歷史記錄。 如果它是公開的,並且有其他合作者, 然後仔細考慮這是否真的值得做。

看到更多細節在 https://help.github.com/articles/removing-sensitive-data-from-a-repository/

+0

感謝janos,我還有另外一個疑問,我該如何刪除.DSStore文件的所有多次出現 – 0x52616A657368

+0

@Venkat'git filter-branch --force --index-filter'git ls-files | grep /\\​​.DSStore$ | xargs git rm --cached --ignore-unmatch'--prune-empty --tag-name-filter cat - --all' – janos