Visual Studio 2019 mit Git – „Änderungen rückgängig machen“ funktioniert nicht immer

Lesezeit: 3 Minuten

Cade Bryants Benutzeravatar
Cade Bryant

Wenn Sie in Visual Studio 2019 mit einem Git-Repository arbeiten, funktioniert das Klicken mit der rechten Maustaste und die Auswahl von „Änderungen rückgängig machen“ im Team Explorer manchmal nicht wie erwartet. Obwohl die Änderungen tatsächlich rückgängig gemacht werden, bleibt das Dateisymbol weiterhin unter der Überschrift „Änderungen“.

Auch wenn es verschwindet, oft, wenn ich dann renne git status Von der Konsole aus wird der Dateiname in der Konsole unten angezeigt changes not staged for commit.

Ich kann das ganz einfach durch Ausführen beheben git reset --hard. Trotzdem ist es ärgerlich. Irgendeine Idee, was unter der Haube von VS vorgeht, das dazu führt, dass es auf diese Weise (fehl-)funktioniert?

Basierend auf Ihrer Beschreibung (Rückgängig aktualisiert den Dateistatus nicht, git reset --hard ist eine Problemumgehung), das klingt nach dem folgenden Problem:

https://developercommunity2.visualstudio.com/t/Undo-changes-with-new-git-experience-pre/1170228

Die Grundursache scheint mit den Zeilenenden zusammenzuhängen:

Microsoft:

Unser Verdacht ist also, dass es vielleicht so ist dotnet format habe die Zeilenenden neu geschrieben (und nur die Zeilenenden), also jetzt git status meldet, dass es geänderte Dateien gibt. Wenn Sie jedoch versuchen, tatsächlich einen Checkout-Index zu erstellen, wird Git tatsächlich nichts mutieren. Git Status geht jedoch davon aus, dass es Änderungen gibt, da der Stat-Block ihn glauben lässt, dass es eine Änderung gegeben hat (da es eine Änderung gegeben hat). Eine Möglichkeit, dies zu überprüfen, besteht darin, dies über die Befehlszeile oder Visual Studio zu tun. Alles inszenieren (git add *) (Sie können dies in Visual Studio tun, indem Sie mit der rechten Maustaste auf „Stufe“ klicken) git status (oder, wenn in Visual Studio, wird der Status automatisch aktualisiert) Wenn die Dateien aus der Ansicht verschwinden, gibt es ein Zeilenende Problem, und Git hat plötzlich erkannt, dass es sich tatsächlich um dieselbe Datei handelt.

Reporter:

Ja! Durch das Staging von allem sind alle Dateien verschwunden 🙂

Microsoft:

Cool! Das wissen wir also! Bei reinen EOL-Änderungen werden SHA-Änderungen nicht geändert. Git speichert diese offenbar intern als LF-only. Weder checkout noch checkout-index überschreiben die Datei auf der Festplatte. Da Git hier unsere Quelle der Wahrheit ist, erhalten wir grundsätzlich irreführende Informationen. Allerdings denke ich, dass Git hier in Bezug auf die Leistung vielleicht die richtige Entscheidung getroffen hat. Allerdings ist dies aus UX-Perspektive sehr verwirrend, daher werden wir dies bewerten. Wir prüfen, wie wir diese UX verbessern können.

Das Problem ist immer noch offen, aber es scheint, dass die Ursache identifiziert wurde. Im Moment gibt es nur die Problemumgehung.

  • +1: Ich kann bestätigen, dass diese Antwort richtig ist; Stellen Sie einfach eine beliebige Datei mit einer „unsichtbaren Phantomänderung“ bereit, und diese Datei verschwindet einfach „magisch“ aus der Liste der geänderten Dateien (ohne auch in die Liste der bereitgestellten Dateien aufgenommen zu werden).

    – Wille

    2. Juni 2021 um 23:07 Uhr


  • @Will Kann bestätigen, dass in der neuesten Version von VS 2019 gerade das gleiche Problem aufgetreten ist. Durch das Staging verschwindet die Datei irgendwie. Verwirrend.

    – Tomas Voracek

    16. August 2021 um 8:30 Uhr

  • In VS2022 funktioniert es immer noch nicht. Warum bin ich nicht im Entferntesten überrascht?

    – Neutrino

    6. Mai 2022 um 14:47 Uhr

  • Der Staging-Trick funktioniert auch in den neuesten Versionen von VS2022 und Git noch.

    – Tomas Voracek

    29. Juli 2022 um 15:07 Uhr

Ich hatte eine Datei, die in diesem Status hängen blieb. Das Problem bestand darin, dass die Groß-/Kleinschreibung der lokalen Datei nicht mit der Groß-/Kleinschreibung der Remote-Datei übereinstimmte, obwohl die Schreibweise dieselbe war.

In meinem Fall wurde der Vorgang blockiert, weil ein Build/Debug ausgeführt wurde.

Benutzeravatar von DComfort
DKomfort

Folgendes habe ich getan, damit sich vstudio beim „Rückgängigmachen von Änderungen“ oder beim Speichern der Datei auf der Festplatte korrekt verhält. Wenn Sie den folgenden Befehl in einer cmd-Shell ausführen:

git config --global core.autocrlf false

Vstudio respektiert diese Git-Konfigurationseinstellung.

1450370cookie-checkVisual Studio 2019 mit Git – „Änderungen rückgängig machen“ funktioniert nicht immer

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

Privacy policy