1. ホーム
  2. git

[解決済み] git rm - fatal: pathspec did not match any files.

2022-02-14 21:25:57

質問

誤って9000枚以上の写真をプロジェクトフォルダに追加してしまいました。そして、それらをコミットしました。その後、ディスクからそれらを削除しました。コミットしました。

今度は、変更をgitサーバーにプッシュしようとしました。しかし、時間がかかりすぎて、12Gb のデータを送信しようとしました。

ディスク上のファイルサイズをチェックしたところ、本当に .git フォルダは12Gb必要です。

写真の削除方法 をクリックします。私が試したのは git rm が、失敗します。

❯ git rm public/photos
fatal: pathspec 'public/photos' did not match any files

すでにディスクから削除しているのに、まだ .git フォルダーに保存されます。

を追加しようとしたのですが public/photos.gitignore :

public/photos/
*.zip

しかし、結果は出ません。 もちろん、私は hard reset head 私のプロジェクトにこれほど多くのジャンク写真がなかったときまで。しかし、その時から私は何度もコミットし、コードに多くの変更を加えました。

解決方法は?

あなたの場合 git filter-branch の代わりに git rm .

git rm はファイルを削除して git に追跡されなくなりますが、その画像に対応する古いコミットオブジェクトは削除されないので、12GB の画像に対応する以前のコミットをプッシュしなければならないままです。

その git filter-branch 一方、これらのファイルは以前のコミットからも削除されるので、プッシュする必要はありません。

  1. コマンドを使用する

    git filter-branch --force --index-filter \
      'git rm -r --cached --ignore-unmatch public/photos' \
      --prune-empty --tag-name-filter cat -- --all
    
    
  2. フィルターブランチが完了したら、意図しないファイルが失われないことを確認します。

  3. 次に、.gitignoreルールを追加します。

    echo public/photos >> .gitignore
    git add .gitignore && git commit -m "ignore rule for photos"
    
    
  4. ここで、プッシュを実行します。

    git push -f origin branch
    
    

チェック これ , これ そして これ をご覧ください。念のため、これらの手順を進める前に、システム上にレポのバックアップコピーを作成することをお勧めします。

最初のエラーメッセージについては、すでに git rm そのため、gitは追跡していないファイルを削除できないので、文句を言っているのです。読む 詳しくはこちら .