web-dev-qa-db-ja.com

gitはステージングされていない変更があると言いますが、表示しません

削除したい2番目のファイル(最初は現在.gitignoreにあるJetBrainsの.ideaフォルダーファイル)でこのコマンドを実行していますが、次のことができません。

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が参照している「ステージングされていない」ファイルをどのようにして知ることができますか、そしてこれをどのように修正しますか?

PS問題はスタッシュではありません。私はこのレポにスタッシュを持っておらず、スタッシュも行っていません。

注:私は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)
8
Oliver Williams

あはは!私は何が起こっているのか理解しました。少し洞察を得るために最後の数文を読んでください。

答えは最初に行うことでした:

git status

これは、変更されたファイルをREDで示しました。これは、gitの頭の中で何らかの形で「削除」されていることを意味していると思います。私はそれからしました:

git add --all

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

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

上記のコマンドを別のファイルで実行しようとすると、同じ問題が発生しました。だから私は再びgit statusを実行しましたが、履歴から削除したばかりのファイルがまだthereであることがわかりましたので、これを行う必要があります:

git rm /previous_file_you_just_removed_from_history.php

また、明確にするために、filter-branchコマンドはすべてのコミットからそのファイルの履歴を削除しますが、そのファイルに加えた変更は削除しません。つまり削除されたファイルは、その時点までに行ったすべての変更の合計です。これが他の誰かのためにこの概念を明確にするのに役立つことを願っています。

8
Oliver Williams

私はこれと同じ問題を抱えていました。新しいクローンの直後にすべてのファイルが変更されたものとして表示され、Tortoise Gitがチェックアウトとコミット時にすべてのファイルの行末を自動的に変更していたことが原因であることがわかりました(私の場合)。

この動作を防ぐには、リポジトリ設定ウィンドウでAutoCrLf設定を無効にします(Git-> Config Source [Local]-> AutoCrlfこの質問。 で説明されているように

0
ArkTekniK