[英]How to remove all occurences of a file in index, from all git commits
第一次在這里使用git。 我不小心使用了.gitignore文件而沒有使用“ git init”,所以我的提交中包含了gradle /和build /文件。 我正在使用“ git ls-tree -r master”來顯示索引中的所有文件。 而不是檢出每個先前的提交並使用“ git rm --cached”刪除所有不必要的build和gradle文件,我如何通過所有先前的提交刪除所有出現的內容?
編輯:有沒有辦法刪除所有提交中的每個目錄和文件,只保留src目錄?
您可能確實希望使用filter-branch
命令而不是rebase
。 無論哪種方式,都有幾項需要注意的事項:
因此,這就是rebase和filter-branch的作用:它們復制提交,並在提交副本之前允許進行一些更改。 然后,在提交了(略有不同)副本之后,他們將引用(分支和標記名稱)移至副本。
考慮到這一點,還有更多要考慮的項目:
--tag-filter
時才這樣做。 (如果你沒有標簽,這其實並不重要,很明顯)而且,當過濾器分支副本簽標注的標簽,它溝渠它們的簽名:他們成為無符號。 否則,您將不得不手動重新簽名它們,並且過濾器分支被設計為完全自動化的。 現在您已准備好鏈接的問題及其過濾分支答案。 不過,有關使用--tag-name-filter
和一些加速選項的說明,也請參見有關問題的其他答案 。
請注意, git rm -f --cached --ignore-unmatch
適用於目錄(或“文件夾”)名稱以及純文件名。 可以使用--tree-filter
(在第二個鏈接的頁面上的其他答案中提到)代替--index-filter
,它對於復雜的操作更方便,但是要慢得多(確切的速度根據操作系統的不同而不同) ,repo的大小,SSD與旋轉媒體存儲等,但是比使用--index-filter
更好的“開始估算”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.