Git リポジトリから (多くの異なるディレクトリから) 多くのファイルを物理的に削除しました。
それらの参照はまだ見ることができ、GitHub にコミットすると、古いファイルがまだそこに残っています。
これらの参照をリモート リポジトリ サーバー (GitHub) とローカル PC から削除する必要があります。
これらの参照をリポジトリから削除するにはどうすればよいですか?
これらのファイルを削除した「コミット」(新しいバージョンのgitの用語)を作成し、それをGitHubにプッシュする必要があります。入力するとgit status
、次のように表示されます。
# On branch master
# Changed but not updated:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# deleted: old-file.txt
# deleted: another-old-file.txt
# deleted: unneeded.c
の出力に他の変更がリストされていない場合は、次のgit status
ように安全に実行できます。
git add -u
git commit -m "Delete many old files"
...次にGitHubにプッシュします。(git add -u
は、次のコミットのために、gitによって追跡されているファイルへの変更をステージングするように指示します。これには、ローカルで手動で削除したこれらのファイルが含まれます。)
ただし、その出力に他の変更がリストされている場合は、次のように、より正確なものを試してみることをお勧めします。
git rm
将来的には、そもそもでファイルを削除するのが最善です:)
リポジトリのすべてのコミットからファイルを削除する場合は、が必要git filter-branch
です。これを使用する例は、インターネット全体、たとえばGitHubで見つけることができます。
ファイルの削除とこの削除のコミットについて話している場合は、使用する必要があります
git rm filename
このコマンドは、ファイル自体を削除し、すぐにコミットするために削除をステージングします。したがって、この場合、実行するだけで済みます
git commit -m "Remove files" #everything staged will be committed
ところで、ファイルを移動または名前変更する場合も同じです。shell move コマンドを使用してそれを行うのではなく、「git mv [source] [destination]」を使用してください。
「git rm」を使用せずにそれらを削除した場合
最初にそれらをステージングする必要があります:
git add -u
git commit -m "Remove files"
それらを履歴全体から消したい場合は、それらのファイルについて言及しないようにするには、次を使用する必要があります
git filter-branch
ほとんどの場合、filter-branch コマンドはかなり高度なものであるため、実際には使用する必要がないことに注意してください。最適な使用例は、クレジット カード番号や有効期限などの重要な情報を含むファイルをコミットし、このファイルをパブリック リポジトリにプッシュした場合です。この場合、この値を無関係な値に変更するか、ファイルを削除するだけでは十分ではありません - フィルター ブランチを使用する必要があります;) ...そして誰もあなたのレポから取得するのに十分な速さではないことを祈ります;) ...そしてあなたのとにかく盗まれたクレジットカード...;)
それらは削除済みとしてインデックスに表示されます。それらをステージングするだけで削除されます。
git add -iを使用して、ステージングプロセスを高速化します。