2012-04-20 103 views
2

git filter-branch -f --index-filter 'git rm -r --cached --ignore-unmatch mysql_db' HEAD如何從標籤中永久刪除git中的文件?

這就是我正在做的,以刪除mysql_db,這很好。但現在我必須從我所有的標籤中完成。我怎樣才能做到這一點?

+0

可能重複[爲什麼git-filter-branch沒有重寫標籤?](http://stackoverflow.com/questions/7672907/why-has-git-filter-branch-not-rewritten-tags) – 2012-04-20 15:32:00

回答

7

您必須重寫標籤的名稱,以及(那麼他們將指向改寫提交):

git filter-branch -f \ 
    --index-filter 'git rm -r --cached --ignore-unmatch mysql_db' \ 
    --tag-name-filter 'cat' -- --all 

使用--all重寫所有提交,而不僅僅是到達從目前HEAD提交。

manpage of git filter-branch

--tag-name-filter

[...]

原來的標籤不會被刪除,但可以覆蓋;使用「--tag-name-filter cat」來簡單地更新標籤。在這種情況下,要非常小心,並確保在轉換髮生衝突的情況下備份舊標籤。

+0

我認爲OP想要使用HEAD以外的東西。在你的命令中用「 - --all」替換HEAD應該可以做到。 – ralphtheninja 2012-04-20 15:37:12

+0

這取決於他是否要重寫從HEAD或所有提交可到達的所有提交,但是,我同意。我會更新我的問題,以防萬一。 – knittl 2012-04-20 15:39:10