私はbashを使用してファイルをgithubにプッシュしようとしています。それらはすでにそこにあり、私は新しい行やコードなどを含む新しいバージョンをアップロードしています。しかし、試してみるgit add
と次のgit status
ように表示されます。
ブランチマスター
コミットするものは何もない、作業ディレクトリはクリーン
そして、私が使用しているファイルが変更されました。
私はbashを使用してファイルをgithubにプッシュしようとしています。それらはすでにそこにあり、私は新しい行やコードなどを含む新しいバージョンをアップロードしています。しかし、試してみるgit add
と次のgit status
ように表示されます。
ブランチマスター
コミットするものは何もない、作業ディレクトリはクリーン
そして、私が使用しているファイルが変更されました。
git diff
(またはgit status
)が何も表示しない場合、追加するものがない理由を説明します。それで、質問は本当にです:「なぜ私のファイルが変更されたことをgitが認識しないのですか?」
回答:
たまに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に指示します。
git add -f path/to/the/file
コミットするファイルを強制的に追加します。
git add -f
、この「仮定変わらない」状態にあったファイルを、それはやっていない仕事-に持っていたのいずれかgit update-index
またはgit rm --cached
続いgit reset
それを動作させるために。
git rm --cached -r .
し、その後git reset .
。
git update-index --no-skip-worktree path/to/file
。これが私が問題を解決した方法です
.gitignore
ファイルを確認してください。ファイル、ファイルの拡張子、または操作しようとしているファイルへのパスが、.gitignore
これは、そのファイルが無視されている(変更されたファイルとして認識されていない)理由を説明しています。
これは、私が同様の問題を抱えていたときに私に当てはまることがわかりました。
lib/
。これにより、gitはこのフォルダーを無視します。問題ありません-少なくとも、このフォルダーがプロジェクトのメインフォルダーでない場合は、私に起こったことと同じです。
すでに説明したように、ファイルにはおそらく「仮定しない」というフラグが付けられています。これは基本的にファイルを変更しないことをgitに伝えるため、ファイルで変更を追跡する必要はありません。ただし、これは複数のファイルに影響を与える可能性があり、ワークスペースが大きい場合は、それらを1つずつチェックしたくない場合があります。その場合、次のことを試すことができます: git update-index --really-refresh
ドキュメントによると:
Like --refresh, but checks stat information unconditionally, without regard to the "assume unchanged" setting.
基本的にgitに、「仮定されていない」フラグに関係なく、すべてのファイルの変更を追跡させます。
git status
、ファイルは変更されていませんがgit add .
、2つのファイルが追加され、git update-index --really-refresh
これらの2つは更新が必要ですが、何もしないようです。何か案が?
git ls-files -v | grep '^[[:lower:]]'
何も助けなかった場合、我々は助けることができるので、あなたが詳細に質問を作成する必要があります君は。
この質問に答えるのに十分ではないので、いくつか推測してみましょう。
1)タイプを修正するために、変更を隠しておきます。 git stash pop
2)変更があり、それらをコミットした場合、コミットを確認できるはずです。 git log
3)何らかのgit reset --hard
変更が行われた場合、reflogに変更が含まれている可能性があります。git reflog --all
後に、参照をチェックアウトするか、参照をチェリーピッキングして、見つけた場合に参照します。
4)同じリポジトリを数回チェックアウトしたが、間違ったリポジトリにいる。
git commit --amend
、最後のコミットに新しい変更を加えることもできます。ただし、すでにコミットを共有している場合は、これを行わないでください。
クレイジーに聞こえますが、自分が正しいと思っていても、正しいリポジトリにいないことがあります。たとえば、親ディレクトリを移動したが、テキストエディタでリポジトリを切り替えるのを忘れた可能性があります。またはその逆:テキストエディターでは正しいリポジトリにいますが、コマンドラインでは間違ったリポジトリです。最初の状況では、正しいファイルで編集を行いますが、コマンドラインで開いているフォルダーとは異なるため、実際には間違ったファイルです。2番目の状況では、実際に正しいファイルを編集しましたが、コマンドラインの正しいディレクトリにいないため、コマンドラインgitは変更を認識しません。
このようなファンキーなことが起こっていた。Eclipse Keplerのgitプラグインは、すべてのプロジェクトフォルダーを.gitignoreフォルダーで無視されるように自動的にマークしていました。
私が得ただろうというときcommit
にTeam
、メニュー、彼らは戻って無視にすべて設定します。私が知る限り、これは親プロジェクトで派生したものとして設定したためです。これをdervied
修正済みとしてマークを解除します。私はこれまでインディゴでこれを見たことがない。それが誰かに役立つことを願っています。
WinMergeツールを介して差分を転送してファイルを変更するときに、Windowsでこれが発生しました。どうやらWinMerge(少なくとも私のコンピューターでの設定方法)は、変更するファイルのタイムスタンプを更新しないことがあります。
Windowsでは、git statusは、特にファイルのタイムスタンプとファイルサイズの変更を使用して、ファイルが変更されたかどうかを判断します。そのため、タイムスタンプは更新されなかったので、ファイルサイズのみが残っていました。残念ながら、問題のファイルはコンテンツが7.1.2から7.2.0に変更された単純なバージョンのファイルでした。つまり、ファイルサイズも変更されていません。WinMergeによって変更され、タイムスタンプが更新されなかったが、変更後にgitステータスによって正常に検出された後、サイズが異なる他のファイル。
Sublime Text-3の使用中に同様の問題が発生しました。コードに新しい変更を加えて保存した後、git add ./statusコマンドを試したところ、「最新のブランチ」という応答がありました。テキストエディターで更新を保存しても、ファイルは実際には変更されていません。他のエディターでファイルを開き、変更を保存するとうまくいきました。
TL; DR; あなたは正しいリポジトリにいますか?
私の話は少しおかしいですが、同じようなシナリオを持っている可能性のある人がいる可能性があるので、ここで共有してください。
実際、私のマシンでは、2つの別々のgitリポジトリがrepo1
ありrepo2
、同じルートディレクトリにsource
。これらの2つのリポジトリーは、基本的には、私が会社で作業する2つの製品のリポジトリーです。さて、標準的なガイドラインとして、すべての製品のソースコードのディレクトリ構造は、私の会社ではまったく同じです。
そのため、気付かずに、で変更することになっていたまったく同じ名前のファイルrepo2
を変更しましたrepo1
。だから、私はコマンドgit status
を実行repo1
し続け、同じメッセージを出し続けました
ブランチマスター
コミットするものは何もない、作業ディレクトリはクリーン
30分間。それから私の同僚はそれを独立した目として観察し、これを私が間違っていたが非常によく似たリポジトリにいることに気づきました。repo1
Git に切り替えた瞬間、変更されたファイルに気づき始めました。
それほど一般的なケースではありません。しかし、あなたは決して知りません!
シェルの下からディレクトリを移動しましたか?これは、バックアップからプロジェクトを復元した場合に発生する可能性があります。これを修正するには、cd
外に出て再び入れます:
cd ../
cd -
通常、この問題については、まず自分が思っているファイルを編集していることを確認してください。ソースファイルの代わりに変換されたJavaScriptファイルを編集していたときに、この問題が発生しました(変換されたバージョンはソース管理下にありませんでした)。
Git Bash for Windowsの内部からシンボリックリンク()を作成しないでくださいln -s source dest
。
それはシンボリックリンクを作成しませんが、destへのソースのDEEPコピーを行います
Git Bash for Windows(バージョン2.16.2)のMINGW64端末でOPと同じ動作を経験しましたが、私の「編集された」変更は実際には元のディレクトリにあり、私のgit bashコマンドは残っていた深いコピー内にあることに気付きました変更なし。
それは私にも起こりました、私は上記の方法を試しました、そして何も助けにはなりませんでした。次に、解決策は、GUIではなく端末を介してファイルを変更することでした。これがうまくいった理由はわかりませんが、うまくいきました。端末からnanoを介してファイルを編集した後、gitはそれが変更されていると認識し、追加してコミットすることができました。
git add *
次に使用してみてくださいgit commit