gitがファイルが変更されたことを認識しないので、git addが機能しない


97

私はbashを使用してファイルをgithubにプッシュしようとしています。それらはすでにそこにあり、私は新しい行やコードなどを含む新しいバージョンをアップロードしています。しかし、試してみるgit addと次のgit statusように表示されます。

ブランチマスター

コミットするものは何もない、作業ディレクトリはクリーン

そして、私が使用しているファイルが変更されました。


4
すでにコミットしている場合は、コミットするものは何もありません。gitログを確認してください。
Gradyプレーヤー

2
git diffの出力は何ですか?
maazza 2013年

2
@maazza git diffから何も得られない
somerandomguy

1
git diff(またはgit status)が何も表示しない場合、追加するものがない理由を説明します。それで、質問は本当にです:「なぜ私のファイルが変更されたことをgitが認識しないのですか?」
Sunil D. 2013

申し訳ありませんが、私は何が起こっているのかわかります。gitはビジュアルスタジオC#がそれを変更したことを認識していませんが、ノートパッド++などの何かがそれを変更したことを認識しています
somerandomguy

回答:


123

たまにgitインデックスをファイルで「変更されていない」と設定するという問題がありました。

次のコマンドを使用すると、ファイルへの変更を無視しないようにgitに指示できます。

git update-index --no-assume-unchanged path/to/file

それでも問題が解決しない場合は、他の奇妙なケースではリセットで十分かもしれません。


実際には、キャッシュされたファイルを削除してリセットして機能するようにしました。

git rm --cached path/to/file
git reset path/to/file

git rm --cachedインデックスからファイルを削除するだけの手段でreset、最後のコミットからgitインデックスをリロードするようにgitに指示します。


15
git add -f path/to/the/fileコミットするファイルを強制的に追加します。
サン

2
この回答は、私の問題の解決に役立つ唯一の回答でした。それがWindowsの問題かどうかはわかりません(これまで、osxとlinuxのどちらでも、このような問題は一度もありませんでした)。@ThorSummonerに感謝します。ところで、私が試したgit add -f、この「仮定変わらない」状態にあったファイルを、それはやっていない仕事-に持っていたのいずれかgit update-indexまたはgit rm --cached続いgit resetそれを動作させるために。
rsenna 2017

1
あなたのレポの現在の状態については本当にわからない場合も、次の操作を行いますgit rm --cached -r .し、その後git reset .
rsenna 2017

試してみる別のオプションがありますgit update-index --no-skip-worktree path/to/file。これが私が問題を解決した方法です
Fr0sT

1
私にとってはうまくいきましたが、はい、単一ファイルのケースのみです。
トーマスチェン

24

.gitignoreファイルを確認してください。ファイル、ファイルの拡張子、または操作しようとしているファイルへのパスが、.gitignoreこれは、そのファイルが無視されている(変更されたファイルとして認識されていない)理由を説明しています。

これは、私が同様の問題を抱えていたときに私に当てはまることがわかりました。


さらに説明を追加してください。それは他の人を助けるでしょう。
Amit Joshi

1
私はgitignore.ioを使用して.gitignoreを生成し、の行を見つけましたlib/。これにより、gitはこのフォルダーを無視します。問題ありません-少なくとも、このフォルダーがプロジェクトのメインフォルダーでない場合は、私に起こったことと同じです。
パラディーニ

そして私の場合、誰にとっても、それは実際には私のグローバルな
excludesfileでした

最初は、これはうまくいきませんでした。しかし、私はそれを働かせました。私の場合、無視すべきことはgitignoreファイルで2回言及されています。常にすべての出現箇所を検索し、すべて置換します。
MasterJoe 2018

8

すでに説明したように、ファイルにはおそらく「仮定しない」というフラグが付けられています。これは基本的にファイルを変更しないことをgitに伝えるため、ファイルで変更を追跡する必要はありません。ただし、これは複数のファイルに影響を与える可能性があり、ワークスペースが大きい場合は、それらを1つずつチェックしたくない場合があります。その場合、次のことを試すことができます: git update-index --really-refresh

ドキュメントによると:

Like --refresh, but checks stat information unconditionally, without regard to the "assume unchanged" setting.

基本的にgitに、「仮定されていない」フラグに関係なく、すべてのファイルの変更を追跡させます。


1
私にとってgit status、ファイルは変更されていませんがgit add .、2つのファイルが追加され、git update-index --really-refreshこれらの2つは更新が必要ですが、何もしないようです。何か案が?
someonewithpc

2
git statusは、assume-unchangedフラグを持つファイルを無視します。ただし、git update-index --really-refreshを使用するとそのフラグがクリアされ、ファイルが表示されるようになります。もう一度git statusを実行して、変更が変更されているかどうかを確認してください。あなたは何を見てはいけない場合は、この記事に従ってください:stackoverflow.com/questions/2363197/...が 最も顕著なコマンドが持っているファイルの一覧を表示すると仮定し、nochanges:git ls-files -v | grep '^[[:lower:]]'何も助けなかった場合、我々は助けることができるので、あなたが詳細に質問を作成する必要があります君は。
アンドレ・クーニャ

7

この質問に答えるのに十分ではないので、いくつか推測してみましょう。

1)タイプを修正するために、変更を隠しておきます。 git stash pop

2)変更があり、それらをコミットした場合、コミットを確認できるはずです。 git log

3)何らかのgit reset --hard変更が行われた場合、reflogに変更が含まれている可能性があります。git reflog --all後に、参照をチェックアウトするか、参照をチェリーピッキングして、見つけた場合に参照します。

4)同じリポジトリを数回チェックアウトしたが、間違ったリポジトリにいる。


1)隠し場所が見つかりませんでした2)変更を加えてコミットしたので、もう一度コミットできますか?3)私はそれをしませんでした4)私は正しいリポジトリにいます
somerandomguy 2013年

変更があり、それらをコミットした場合は、次のステップ、プッシュ、またはワークフローが何であれ...変更を加えることができれば、もう一度コミットすることができgit commit --amend、最後のコミットに新しい変更を加えることもできます。ただし、すでにコミットを共有している場合は、これを行わないでください。
Gradyプレーヤー

ターミナルを閉じて再度開くと、プロジェクトリポジトリをクリーンアップした後でそれができました。
エディ

6

クレイジーに聞こえますが、自分が正しいと思っていても、正しいリポジトリにいないことがあります。たとえば、親ディレクトリを移動したが、テキストエディタでリポジトリを切り替えるのを忘れた可能性があります。またはその逆:テキストエディターでは正しいリポジトリにいますが、コマンドラインでは間違ったリポジトリです。最初の状況では、正しいファイルで編集を行いますが、コマンドラインで開いているフォルダーとは異なるため、実際には間違ったファイルです。2番目の状況では、実際に正しいファイルを編集しましたが、コマンドラインの正しいディレクトリにいないため、コマンドラインgitは変更を認識しません。


4

このようなファンキーなことが起こっていた。Eclipse Keplerのgitプラグインは、すべてのプロジェクトフォルダーを.gitignoreフォルダーで無視されるように自動的にマークしていました。

私が得ただろうというときcommitTeam、メニュー、彼らは戻って無視にすべて設定します。私が知る限り、これは親プロジェクトで派生したものとして設定したためです。これをdervied修正済みとしてマークを解除します。私はこれまでインディゴでこれを見たことがない。それが誰かに役立つことを願っています。


intellijでこの問題が発生した場合、この問題をどのように修正すればよいですか?
MasterJoe 2018

3

WinMergeツールを介して差分を転送してファイルを変更するときに、Windowsでこれが発生しました。どうやらWinMerge(少なくとも私のコンピューターでの設定方法)は、変更するファイルのタイムスタンプを更新しないことがあります。

Windowsでは、git statusは、特にファイルのタイムスタンプとファイルサイズの変更を使用して、ファイルが変更されたかどうかを判断します。そのため、タイムスタンプは更新されなかったので、ファイルサイズのみが残っていました。残念ながら、問題のファイルはコンテンツが7.1.2から7.2.0に変更された単純なバージョンのファイルでした。つまり、ファイルサイズも変更されていません。WinMergeによって変更され、タイムスタンプが更新されなかったが、変更後にgitステータスによって正常に検出された後、サイズが異なる他のファイル。


3

Sublime Text-3の使用中に同様の問題が発生しました。コードに新しい変更を加えて保存した後、git add ./statusコマンドを試したところ、「最新のブランチ」という応答がありました。テキストエディターで更新を保存しても、ファイルは実際には変更されていません。他のエディターでファイルを開き、変更を保存するとうまくいきました。


これは私にも起こっています
Kloar 2018

2

TL; DR; あなたは正しいリポジトリにいますか?

私の話は少しおかしいですが、同じようなシナリオを持っている可能性のある人がいる可能性があるので、ここで共有してください。

実際、私のマシンでは、2つの別々のgitリポジトリがrepo1ありrepo2、同じルートディレクトリにsource。これらの2つのリポジトリーは、基本的には、私が会社で作業する2つの製品のリポジトリーです。さて、標準的なガイドラインとして、すべての製品のソースコードのディレクトリ構造は、私の会社ではまったく同じです。

そのため、気付かずに、で変更することになっていたまったく同じ名前のファイルrepo2を変更しましたrepo1。だから、私はコマンドgit statusを実行repo1し続け、同じメッセージを出し続けました

ブランチマスター

コミットするものは何もない、作業ディレクトリはクリーン

30分間。それから私の同僚はそれを独立した目として観察し、これを私が間違っていたが非常によく似たリポジトリにいることに気づきました。repo1Git に切り替えた瞬間、変更されたファイルに気づき始めました。

それほど一般的なケースではありません。しかし、あなたは決して知りません!


2

シェルの下からディレクトリを移動しましたか?これは、バックアップからプロジェクトを復元した場合に発生する可能性があります。これを修正するには、cd外に出て再び入れます:

cd ../
cd -

うわー、これは事実だった。クレイジー。別のトリックはまったく機能しませんでした!
マカレル

1

通常、この問題については、まず自分が思っているファイルを編集していることを確認してください。ソースファイルの代わりに変換されたJavaScriptファイルを編集していたときに、この問題が発生しました(変換されたバージョンはソース管理下にありませんでした)。


これについて言及してくれてありがとう!私は正しいファイルを更新していると確信していました。いいえ。顔のヤシ
アシュリーGrenon

1

私のGitクライアント(Gitg)がこの問題の原因です。通常実行する通常のコマンドが機能しませんでした。プロジェクト内のすべてのファイルに触れても機能しませんでした。

私はそれを修正する方法を見つけましたが、それが何が原因かはまだわかりません。プロジェクトディレクトリをコピーします。不足しているファイルは、コピーされたディレクトリのに表示されますgit status。名前を変更しても同じことができます。


1

問題にぶつかりましたが、2つのディレクトリしかありませんでしたが、どちらのディレクトリもgitサブモジュールとして構成されてしまうことがわかりませんでした。どのようにそれが起こったのか私には手掛かりがありませんが、プロセスはこのリンクのいくつかの指示に従うことでしたが、ディレクトリを削除するのではなく(最後に行うように)、むしろgit add path/to/dir


1

Visual Studioでファイルを編集すると、ファイルが保存されていなくても、gitの変更に即座にリストされます。したがって、ファイルを手動で保存するだけで(現在表示されているファイルの場合はCtrl + S、すべてのプロジェクトファイルの場合はCtrl + Shift + S)、git bashがそれらを取得します。


これは、.jsVisual Studio Codeを使用してファイルにコメントを追加するときに役立ちました。ありがとうございました。
SnuKies

0

どのようなファイルをアップロードしようとしましたか?今私は自分のcssの変更をアップロードするためにほぼ1時間を費やしています。しかし、このCSSはstylファイルからコンパイルされたため、gitはそれを無視しました。スタイルのソースを変更すると、すべてが機能しました。

それが役に立てば幸い。


0

時々依存し、gitバージョンによって、そしてあなたがそうするのを忘れた場合git add .

リポジトリでの変更を確認するには、常に使用してgit status、追跡されていないファイルと変更されたファイルをすべて表示します。git diff追加されたファイルのみを表示するためです。


0

Git Bash for Windowsの内部からシンボリックリンク()を作成しないでくださいln -s source dest

それはシンボリックリンクを作成しませんが、destへのソースのDEEPコピーを行います

Git Bash for Windows(バージョン2.16.2)のMINGW64端末でOPと同じ動作を経験しましたが、私の「編集された」変更は実際には元のディレクトリにあり、私のgit bashコマンドは残っていた深いコピー内にあることに気付きました変更なし。


0

私も同じ問題を抱えていました。プロジェクトのコピーが2つあり、ターミナルが間違ったプロジェクトフォルダーにあることがわかりました。


0

それは私にも起こりました、私は上記の方法を試しました、そして何も助けにはなりませんでした。次に、解決策は、GUIではなく端末を介してファイルを変更することでした。これがうまくいった理由はわかりませんが、うまくいきました。端末からnanoを介してファイルを編集した後、gitはそれが変更されていると認識し、追加してコミットすることができました。


これに対する解決策を見つけましたか?マージツールを使用すると、変更されたファイルがgitに認識されない状態で戦っています。gitに変更を表示させる唯一の方法は、マージにnanoを使用することです。これにはかなり時間がかかります。競合するファイルは最初はgitに表示されますが、マージツールによって編集された後、gitでは「変更なし」と表示されます。
Lucas P.

なぜこれが機能するのか、どのように機能するのかわかりませんが、おかげでうまく
いき

0

ここで同じ問題がありますVS2015がjsファイルの変更を認識せず、リポジトリ設定からリモートを削除し、リモートURLパスを再度追加すると問題が解決しました。


0

サーバーでviエディターを使用してパッチファイルを作成すると、同様の問題が発生しました。間隔に問題があったようです。ローカルからパッチをプッシュしたところ、展開は適切でした。


-1

私はこの問題を抱えていました。プロジェクト内の.gitフォルダーにファイルを配置していたため、Mineが機能していませんでした。


-1

私の場合、git reset --hardファイルを削除して空のフォルダをいくつか残しました。内容を調べたところ、ディレクトリが空であることがわかりました。

ただし、gitは空のフォルダーを無視します。(修正、gitはコンテンツを追跡するため、すべてのディレクトリを無視します。空のフォルダーはコンテンツではありません。)


-4

git add * 次に使用してみてくださいgit commit


1
SOへようこそ!これはおそらく質問に答えません、そしてすでにここに9つの答えがあります。答えが必要な質問にあなたの努力を向けてください!
クリスルエンゴ2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.