破棄しようとしている(ファイルの現在のインデックス付きバージョンにリセットする)作業ディレクトリに変更がありますが、git checkout -- <file>
は変更を破棄しません。ファイル(rm -r files
)を手動で削除してから、git checkout -- .
を実行しようとしました。これにより、ファイルが再度変更されたものとして表示されます。
$ git checkout -- .
$ git status
# On branch master
# 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)
#
# modified: files/Hulk.png
# modified: files/Hulk_2.png
#
no changes added to commit (use "git add" and/or "git commit -a")
git diff
を実行すると、ファイルが変更されたことが示されます。
diff --git a/files/Hulk.png b/files/Hulk.png
index 1c256cb..1d37fe0 100644
Binary files a/files/Hulk.png and b/files/Hulk.png differ
diff --git a/files/Hulk_2.png b/files/Hulk_2.png
index 1c256cb..0717199 100644
Binary files a/files/Hulk_2.png and b/files/Hulk_2.png differ
注:一部の人々はgit checkout .
を実行すると述べていますが、これはgit checkout -- .
と同じ結果を実現します。 --
は、ツリー化/コミットポイントをファイル/パスと区別するためにgitcheckoutコマンドで使用される表記法です。
OS:OSX 10.6 Git:1.7.10.2
これは、同じ名前で大文字と小文字が異なる複数のファイルが原因でした。大文字と小文字を区別しないOSXでは、同じ名前で大文字と小文字が異なる複数のファイルは好みません。それらを同じファイルとして表示します。これを修正するために、私はgit mv
(または単にmv
)を一時ファイル名に追加し、一時ファイルを追加しました。これにより、gitは古い/誤った名前のバージョンを削除し、2回目のコミットで名前を付け直すことができました。これは、同じ名前の異なるファイルを異なるケースにできるファイルシステムで修正することもできます。
試しましたか
git config --global core.autocrlf false
または
git config --global core.filemode false
コメントに基づいて、大文字と小文字を区別するようにリポジトリを構成する必要があります。
git config core.ignorecase false
これにより、gitは両方のファイルを追跡できます(ファイルシステムには1つしか表示されないため、非常に混乱します)。 gitが大文字と小文字の区別を正しく追跡しているときに、何が起こっているかを示すためのレプリケーション手順は次のとおりです。
git init /tmp/test && cd /tmp/test
git config core.ignorecase false
echo test>test && git add test && git commit -m "lowercase t"
mv test Test
現在、git status
はtest
との違いを示していません。
git status -s
?? Test
Test
をコミットし、git ls-files
を使用して、現在追跡しているものを確認します。
git add Test && git commit -m "uppercase T"
git ls-files
Test
test
ls
は何を報告しますか?なぜ「テスト」だけなのか
ls
Test
最後に、テストを変更するとどうなりますか?
echo garbage>Test
git status -s
M Test
M test
なんてめちゃくちゃ。
使用する 。の代わりに -
git checkout .
何らかの理由でこれと同じことが私にも起こりましたが、大文字と小文字の区別の問題ではありませんでした。ファイルを削除してからブランチを変更すると、問題が解決しました。
私の場合に役立ったのは:(vinboxxの答えも改善する)
次の方法で.gitattributes
を構成しました。
* text eol=crlf
(マージ後に自動的に適切な形式を使用するように-Xを再正規化したかった)
git config core.autocrlf false
の設定とともにその行を一時的にコメント化した後。すべてが正常に戻りました。
私も同じ問題に直面しました。問題のある2つのファイルにDOSの行末文字が含まれていることがわかりました。私は問題を解決するためにこれを行いました。
1-別のクローンを使用して、UNIXで終わる行を変更します。2-問題が発生していたクローンを吹き飛ばし、クローンを再作成します。
加えた変更をすべて破棄したい場合は、
git checkout .
次にこの問題を回避するために、ファイルシステムを大文字と小文字を区別するように変換することにしました。
Mac OS(10.13.4)ではかなり簡単だと嬉しく思いました。
別のファイルシステムで新しいディスクボリュームをすばやく作成することができます。
新しいボリュームに「プロジェクト」という名前を付け、フォーマットをAPFS(大文字と小文字を区別)に設定しました。
その後、すべてのプロジェクトを新しいボリュームに移動しました。