2017-05-18 13 views
0

私のファイルは "npz、species_coex.npz"です。私のgitリポジトリに誤って追加されています。私の間違いを認識した後、git rmで削除しました。今、私は、gitはまだそれについて知っていることを知っています(これは通常は問題ありませんが、最初は追加されていないかのようにgitに完全に忘れて欲しい)。リポジトリからファイルを永久に削除します。git

私はfilter-branchコマンドについて読んだことがありますが、これについてのすべての警告のために使用しないと思います。

私はthisを読んで、彼らがお勧め:

$ git filter-branch --tree-filter 'rm -f "npz, species_coex.npz" ' HEAD 

私はエラーを取得する:

fatal: ambiguous argument 'npz, species_coex.npz': unknown revision or path not in the working tree 

この問題が発生した理由を、私は、わからないんだけど、理由は空白の(どの私は引用符に入れたように)、またはファイルが現在の頭にないので、私は推測しませんか?このファイルがどこにあるのか教えてください。

私はフィルタブランチなしでこれを行う方法がありますか?ファイルを一度追加して削除しただけなので履歴はかなりシンプルです

+1

'--tree-filter'は非常に遅いですが、引用符で囲まれた推薦が機能するはずです。 'filter-branch'で' rm'だけでなく 'git rm'を実際に使ったようです。より速く不要なファイルを削除するには、 "the BFG"(その名前を検索)を使用することを検討してください。リポジトリ、または少なくとも "悪い"ファイルの後ろのすべての部分を、元のコミットともはや互換性のない新しいコミットにコピーしなければならないことに注意してください。 *これに対応するために*変更する必要があります。 – torek

答えて

2

filter-branchの「問題」は、すでにプッシュされたコミットの履歴を変更するコマンドと同じです。他の誰かがすでにこのコミットを取得しており、それに基づいてブランチを持っている場合は、git rebaseという見出しのように自分の履歴(つまり、手動で1つおきに手動で修正する)をRECOVERING FROM UPSTREAM REBASEの下に手動で修正する必要があります。

履歴からファイルを削除する場合は、ファイルを削除する必要があります。 g。パスワードのような機密情報が含まれている場合は、git rebase -igit filter-branch、またはBFGというツールであれば、履歴を変更する以外の機会はありません。

filter-branchでは、コミットごとにフルワークツリーが必要なので、--tree-filterは使用しないでください。これは、ファイルを追加または変更したい場合に必要です。ファイルを削除するだけの場合は、代わりに--index-filterを使用し、使用できない作業領域ではなくインデックスで操作する必要があります。フィルタのコマンドは、--index-filter 'git rm --cached --ignore-unmatch "npz, species_coex.npz"'のようになります。

あなたは試しとなったエラーは、あなたのfilterコマンドでrm ...が、git rm ...を使用していないことを意味しますが、--ignore-unmatchせずに、あなたが何に似て非既存のファイルを削除しようとした場合、それを無視するのgitを伝えた-fとりわけ、通常のrmユーティリティの場合はそうです。

ファイルをいくつかコミットして追加した場合、対話型のリベースを使用する方が簡単で簡単です。 git rebase -i <the commit before the one that added the file>を実行してから、エディタでpickスタンザをeditに変更してファイルを追加し、エディタを終了します。 Gitが停止したら、git rm 'npz, species_coex.npz' && git commit --amend -C HEADのように現在のコミットからファイルを削除し、git rebase --continueでリベースを続けます。 Gitが終了したら、ファイルなしで履歴の新しいバージョンを作成する必要があります。

+0

助けてくれてありがとうございますが、何も本当に助けられませんでした:git filter-branch --index-filter 'git rm ...'と言ったら致命的です:あいまいな引数 'rm':未知のリビジョンまたはパスが作業ツリーにありません。 だから私は通常のrmを試しましたが、彼はちょうどusage:git filter-branchと言っています...そして、filter branchコマンドの使い方を説明します。 使用する2番目のオプションは機能しません/何をすべきかわかりません。これはすべてのコミットの最初のもので、このファイルを追加したので、チェックアウトする必要があるかどうかはわかりませんでした。 –

+0

ありがとう、すべてがうまくいった(git rebase -rootを実行しなければならなかった) –

+0

ええ、最初のコミットを変更する必要がある場合、 'rebase'はアップストリームコミットの代わりに' --root'を必要とします。しかし、 'filter-branch'も機能するはずです。 '--index-filter'の中にworktreeがないので' rm'ではなく、答えで説明したように 'rm'でファイルを削除することはできません。しかし、 'git rm --cached --ignore-unmatch" npzでは、species_coex.npz "はうまくいきました。あなたが間違って行ったことを教えてくれる完全なコマンドを見る必要があります。 – Vampire

関連する問題