git checkout — verwirft keine Änderungen?

Lesezeit: 5 Minuten

Benutzer-Avatar
Autobahn des Lebens

Ich habe Änderungen in meinem Arbeitsverzeichnis, die ich verwerfen möchte (auf die aktuelle indizierte Version der Dateien zurücksetzen), aber git checkout -- <file> verwirft die Änderungen nicht. Ich habe versucht, die Dateien manuell zu entfernen (rm -r files) dann renne git checkout -- .wodurch die Dateien wieder als geändert angezeigt werden.

$ 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")

Betrieb git diff zeigt an, dass die Dateien geändert wurden …

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

HINWEIS: Einige Leute haben gesagt, dass sie laufen sollen git checkout .dies führt jedoch zum gleichen Ergebnis wie git checkout -- .. Das -- ist nur eine Notation, die im Befehl git checkout verwendet wird, um Treeish-/Commit-Punkte von Dateien/Pfaden zu unterscheiden.

Betriebssystem: OSX 10.6 Git: 1.7.10.2

  • Tut git reset --hard Arbeit?

    – vergenzt

    12. Juli 2012 um 20:58 Uhr

  • @vergenzt, nein… geht nicht. Ich habe das Problem entdeckt. Ich arbeite mit einem Repo, das mehrere Dateien mit denselben Namen und unterschiedlichen Fällen zu haben scheint. Da ich mich auf einer OSX-Workstation befinde, bei der die Groß- und Kleinschreibung nicht beachtet wird, schienen sich die Dateien zu ändern, aber nicht wirklich. Deshalb kann ich sie weder zurücksetzen noch die “Änderung” festschreiben. Ich muss die Dateien auf einem Betriebssystem mit Berücksichtigung der Groß- und Kleinschreibung tatsächlich umbenennen und das Ergebnis festschreiben.

    – Autobahn des Lebens

    12. Juli 2012 um 21:08 Uhr

  • Wenn Sie eine Antwort gefunden haben, fügen Sie diese bitte hinzu und markieren Sie sie als akzeptiert.

    – Swatkins

    12. Juli 2012 um 21:16 Uhr

  • @swatkins habe ich noch nicht, ich arbeite noch daran.

    – Autobahn des Lebens

    12. Juli 2012 um 21:22 Uhr

  • Süss! Viel Glück dabei, das fertig zu bekommen!

    – Swatkins

    13. Juli 2012 um 14:16 Uhr

Die Ursache dafür waren mehrere Dateien mit demselben Namen, aber unterschiedlichen Groß- und Kleinschreibung. In OSX, das die Groß- und Kleinschreibung nicht beachtet, mag es nicht, mehrere Dateien mit demselben Namen, aber unterschiedlichen Groß- und Kleinschreibung zu verwenden. Es betrachtet sie als dieselbe Datei. Um dies zu beheben, rannte ich git mv (oder nur mv) zu einem temporären Dateinamen hinzugefügt, die temporären Dateien hinzugefügt, die es Git ermöglichten, die alten/falsch benannten Versionen zu entfernen, dann ein zweites Commit, um sie wieder zu benennen. Dies könnte auch auf einem Dateisystem korrigiert werden, das zulässt, dass verschiedene Dateien mit demselben Namen unterschiedliche Groß- und Kleinschreibung sind.

  • Danke dafür! Es hat mir geholfen, einen extrem frustrierenden Fehler in CocoaPods zu überwinden

    – ndbreit

    3. August 2014 um 3:50 Uhr

Hast du versucht

git config --global core.autocrlf false

oder

git config --global core.filemode false

  • Warum sollte man das versuchen?

    – Finstern

    8. Juni 2015 um 22:00 Uhr

  • Ich verwende Git unter Windows über Cygwin. Wir haben einige verrückte Sicherheitsrichtlinien, die die Berechtigungen für Dateien während Git-Aktionen auf magische Weise ändern. (Andere auf der Cygwin-Mailingliste haben dies bemerkt.) Git erkennt diese Dateimodusänderungen, aber git checkout -- ${file} kann sie nicht rückgängig machen. Interessante Idee bzgl git config --global core.filemode false!

    – Kevinarpe

    2. Dezember 2015 um 7:34 Uhr


  • Das hat geholfen. Versuchen Sie nach dem Auschecken mit ‘git checkout — file’ einen git diff. Wenn es heißt, dass sich die gesamte Datei geändert hat, aber es wirklich genau gleich aussieht, dann könnte es autocrlf sein.

    – Rauben

    11. Februar 2016 um 17:20 Uhr

Basierend auf Ihren Kommentaren müssen Sie Ihr Repository so konfigurieren, dass die Groß-/Kleinschreibung beachtet wird:

git config core.ignorecase false

Dadurch kann git beide Dateien verfolgen (obwohl das Dateisystem nur eine anzeigt, was enorm verwirrend ist). Hier sind Replikationsschritte, um zu demonstrieren, was passiert, wenn Git die Groß-/Kleinschreibung korrekt verfolgt:

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

Jetzt git status zeigt keine Unterschiede zu test:

git status -s
 ?? Test

Verpflichten Test und verwenden git ls-files um zu sehen, was wir jetzt verfolgen:

git add Test && git commit -m "uppercase T"
git ls-files
 Test
 test

Was macht ls Bericht? Warum, natürlich nur ‘Testen’:

ls
 Test

Was passiert schließlich, wenn wir Test modifizieren?

echo garbage>Test
git status -s
 M Test
 M test

Was für ein Chaos.

Verwenden . Anstatt von —

git checkout .

Aus irgendeinem Grund ist mir dasselbe passiert, aber es war kein Problem mit der Groß- und Kleinschreibung. Das Löschen der Datei und das anschließende Ändern der Zweige lösten das Problem.

Benutzer-Avatar
mpasko256

Was in meinem Fall geholfen hat: (verbessert auch die Antwort von vinboxx)

Ich hatte mich konfiguriert .gitattributes auf folgende Weise:

* text eol=crlf

(Ich wollte -X renormalize, um nach dem Zusammenführen automatisch das richtige Format zu verwenden)

Nachdem Sie diese Zeile vorübergehend zusammen mit der Einstellung kommentiert haben git config core.autocrlf false. Alles ging wieder normal.

Benutzer-Avatar
Jonglierhobo

Wenn Sie alle vorgenommenen Änderungen verwerfen möchten, verwenden Sie einfach

git checkout .

  • Das habe ich getan, siehe meine Frage. Beachten Sie, dass git checkout -- . und git checkout . werde das gleiche tun.

    – Autobahn des Lebens

    12. Juli 2012 um 19:16 Uhr

1180310cookie-checkgit checkout — verwirft keine Änderungen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy