2016-09-26 215 views
0

我有一個小型個人項目,它是一個只有主分支和多個提交的git存儲庫。 (實際上是19)。我發現我意外地在回購中包含了幾個.psd文件。這發生在第七次提交。我意識到我的錯誤在第17次提交併將.psd添加到.gitignore。如何從幾個git提交中追溯刪除某些類型的文件

如何從這些提交中追溯刪除某些文件(在本例中爲* .psd)?或者,我如何從提交中刪除他們的文件夾?

會是:git filter-branch --index-filter 'git rm --cached --ignore-unmatch *.psd' HEAD,根據this page

回答

0

除了您需要指定範圍的應用過濾器分支的提交外,您的命令幾乎看起來正確。我擔心,如你現在寫的那樣,你可能會把它應用到你的整個歷史中,這可能不是你想要的。假設你想掩蓋從包含.psd文件到現在的承諾的範圍內,你可以使用:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch *.psd' HEAD~12..HEAD 

我假設你有19個提交,其中HEAD~12將參照第七提交。

更新:

如果你擔心破東西,同時使用filter-branch,那麼首先推分支到遠程作爲備份:

git push origin your_branch 

更重要的是,推到一個分支一個不同的名字,例如

git push origin your_branch:backup_branch 

如果出現問題,您可以刪除您的本地分支並從遠程再次拔出。

+0

我還沒有運行該命令,幸運的是。有沒有辦法在一種測試運行中運行這個命令?另外,如果從所有提交中刪除.psd文件,我都會很好,但它們只出現在其中的一些提交中。 – Flobin

+0

@Flobin我更新了我的答案,給你一個安全選項,你可以用來防範災難。 –

相關問題