24

破棄しようとしている作業ディレクトリに変更があります (ファイルの現在のインデックス付きバージョンにリセットします) が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 -- .ます。は--、ファイル/パスからツリー/コミット ポイントを区別するために git checkout コマンドで使用される単なる表記です。

OS: OSX 10.6 Git: 1.7.10.2

4

11 に答える 11

23

この原因は、名前が同じで大文字と小文字が異なる複数のファイルが原因でした。大文字と小文字を区別しない OSX では、名前が同じで大文字と小文字が異なる複数のファイルは好きではありません。それらを同じファイルとして表示します。これを修正するために、一時ファイル名を実行git mv(または単にmv) し、一時ファイルを追加しました。これにより、git は古い/間違った名前のバージョンを削除し、2 回目のコミットでそれらの名前を元に戻しました。これは、同じ名前の異なるファイルを異なるケースにできるファイルシステムでも修正できます。

于 2012-07-12T21:36:31.460 に答える
9

試しましたか

git config --global core.autocrlf false

また

git config --global core.filemode false
于 2014-04-24T09:27:06.557 に答える
6

コメントに基づいて、大文字と小文字を区別するようにリポジトリを構成する必要があります。

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

なんてめちゃくちゃ。

于 2012-07-13T12:43:04.213 に答える
2

使用する 。それ以外の -

git checkout .
于 2012-07-12T19:13:48.763 に答える
1

何らかの理由でこれと同じことが起こりましたが、大文字と小文字を区別する問題ではありませんでした。ファイルを削除してからブランチを変更すると、問題が解決しました。

于 2015-01-16T17:31:29.187 に答える
0

行ったすべての変更を破棄する場合は、単に使用します

git checkout .
于 2012-07-12T19:13:50.920 に答える
-2

「rm -r file」を使用してファイルシステムからファイルを削除しても、リポジトリからは削除されません。「git rm」を使用してgitで同じことを行う必要があります

于 2012-07-12T19:20:38.610 に答える