1. ホーム
  2. git

[解決済み] git は、ステージされていない変更があると言いますが、それを表示しません。

2022-02-17 17:33:53

質問

削除したい2つ目のファイル(1つ目はJetBrainsの.ideaフォルダのファイルで、現在は.gitignoreになっています)に対してこのコマンドを実行しているのですが、うまくいきません。

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch gf5/console/basic.php' --prune-empty --tag-name-filter cat -- --all
Cannot rewrite branches: You have unstaged changes.

では、git が一覧表示しないときに、どのような "unstaged" ファイルを参照しているのかを知るにはどうすればよいのでしょうか、また、これを修正するにはどうすればよいのでしょうか。

PS 問題はstash(es)ではなく、私はstashを持っておらず、このレポで一度もstashをしたことがありません。

注:私は git status と表示され、これを受信します。

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   gf5/console/basic.php

Changes not staged for commit:
   (use "git add <file>..." to update what will be committed)
   (use "git checkout -- <file>..." to discard changes in working directory)

//(and a whole long list of files)

解決方法は?

アハハ! 何が起こっているのかがわかった。 最後の数文を読むと、ちょっとしたヒントがあります。

答えは、まずやることでした。

git status

これは、変更されたファイルが赤で表示され、gitの中では何らかの形で"delet"されていることを意味していると思われます。 それから、私はこうしました。

git add --all

そこから、SourceTreeを使ってステージングされたすべてのファイルをコミットしました(コマンドラインをずっと使っていなくてすみません)。 私は先に進み、同時に変更をサーバーにプッシュしましたが、これはオプションでしょう。

その後、上記のコマンドは正常に動作しました。

別のファイルに対して上記のコマンドを実行しようとしたところ、同じ問題が発生しました。 そこで、もう一度 git status となり、先ほど履歴から削除したファイルがまだ そこ というように、こうする必要があります。

git rm /previous_file_you_just_removed_from_history.php

また、明確にしておきたいのは、filter-branch コマンドはそのファイルの履歴をすべてのコミットから削除しますが、そのファイルに対して行った変更を削除するわけではありません。 つまり、削除されたファイルは、その時点までにあなたが行ったすべての変更の合計であることに変わりはありません。 このコンセプトが誰かの役に立つことを願っています。