web-dev-qa-db-ja.com

git rm-致命的:pathspecがどのファイルとも一致しませんでした

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

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

ディスク上のファイルサイズを確認したところ、.gitフォルダーが実際に12 Gb必要であることがわかりました。

写真を削除する方法そこから? 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できました。しかし、その時以来、私は何度もコミットし、コードに多くの変更を加えました。

57
Maxim Yefremov

あなたの場合、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
    

詳細については、 thisthis 、および this を確認してください。安全のために、これらの手順を進める前に、システムにレポジトリのバックアップコピーを作成することをお勧めします。

元のエラーメッセージについては、git rmを使用して既に追跡を解除しているために発生しています。したがって、gitは、追跡していないファイルを削除できないため不満を言っています。 詳細はこちら をお読みください。

64
mu 無

非常に簡単な答えです。

ステップ1:

まず、git add .またはgit add <filename>を使用して、削除する未追跡ファイルを追加します。

ステップ2:

次に、コマンドgit rm -f <filename> here rm= removeおよび-f= forcelyを使用して簡単に削除します。

6
Bharti Rawat

ステップ1

ファイル名を.gitignoreファイルに追加します。

ステップ2

git filter-branch --force --index-filter \
    'git rm -r --cached --ignore-unmatch YOURFILE' \
    --Prune-empty --tag-name-filter cat -- --all

ステップ

git Push -f Origin branch

@ muに感謝します

5
klmlfl

私の場合、このチェーンは機能します:

  1. git rm -r WebApplication/packages

Git-dialogの確認がありました。 「y」オプションを選択する必要があります。

  1. git commit -m "blabla"
  2. git Push -f Origin <ur_branch>
1
Ustin
git stash 

仕事をしました、git rmの代わりにrmを使用して削除したファイルを復元しました。

最初に最後のハッシュをチェックアウトしましたが、それが必要だとは思いません。

1
user1767316