So erhalten Sie das Revert-Verhalten von SVN in Git

So erhalten Sie das Revert-Verhalten von SVN in Git

Ich weiß, ich weiß, git revertaber ich habe gerade erfahren, dass es sich nicht genau so verhält wie svn revert– zumindest nicht in Visual Studio 2015 oder vielleicht nicht in TortoiseGit. Ich erkläre es:

Ich bin neu bei VS2015 und auch neu bei Git. Als ich entdeckte, dass VS2015 sofort einsatzbereit über eine Git-Integration verfügt, habe ich es ausprobiert. Ich arbeitete jedoch an mehreren Dateien und wollte nur eine davon festschreiben. Leider war der Filter, den ich im Team Explorer-Bereich angewendet hatte, nicht auf die festgeschriebenen Dateien anwendbar (ich vermute, deshalb lautet der Titel der Schaltfläche „Alle festschreiben“). Stattdessen wurden alle „schmutzigen“ Dateien festgeschrieben – ups!

Ich habe TortoiseGit verwendet, um das Protokoll meines Repositorys anzuzeigen, das letzte (lokale) Commit ausgewählt und es über „Änderungen durch dieses Commit rückgängig machen“ zurückgesetzt. Ich hatte erwartet, dass dieser Vorgang die Dateien, an denen ich arbeitete, in den „schmutzigen“ Zustand zurückversetzen würde, in dem sie sich vor dem Commit befanden, ähnlich wie bei einem SVN-Revert, aber zu meiner Überraschung setzte der Vorgang meine lokalen Dateien in den vorherigen Zustand zurück.repoVersion, nicht in den Zustand, in dem sie waren, bevor ich sie festgeschrieben habe.

Natürlich konnte ich meine Arbeit wiederherstellen, da sie sich vollständig in der Revision „alle Dateien“ befand, die ich ursprünglich festgeschrieben hatte. Ich machte mich einfach daran, jede Datei daraus in ihr richtiges Verzeichnis zu kopieren. Aber was übersehe ich hier? Gibt es eine Git-Funktion, die ich anstelle von Revert hätte verwenden sollen?

Antwort1

In Git können Sie ein ganzes Commit entfernen. Am besten tun Sie das nur bei Commits, die nicht gepusht wurden. Der ganze „verteilte“ Teil von Git macht das möglich. Mit SVN sind Ihre Änderungen sofort für andere verfügbar. Mit Git sind sie erst verfügbar, wenn sie gepusht wurden („Sync“ in Visual Studio).

Anstatt also das Commit rückgängig zu machen (was bedeutet, dass die fehlerhaften Änderungen im Repository verbleiben und unerwartete Nebenwirkungen haben können), führen Sie Folgendes aus git reset --mixed HEAD~1. Das bedeutet, dass Ihr Arbeitsverzeichnis so bleibt, wie es ist, aber das letzte Commit wird entfernt. Das bedeutet, dass Git alle Dateien wieder als geändert anzeigt.

Durch das Zurücksetzen in Git wird ein „inverses“ Commit des zurückgesetzten Commits erstellt, wobei alle Änderungen rückgängig gemacht werden.

Um dann nur eine einzelne Datei festzuschreiben, prüfen Sie zunächst mit , git statusdass Git keine unerwünschten Änderungen bereitgestellt hat. Verwenden Sie dann , um git add path/to/file.txt(nur) diese Datei bereitzustellen. Führen Sie danach einfach aus git commit, verwenden Sie eine entsprechende Commit-Nachricht und fertig.

Wenn Sie die Datei ausführen git commitund der Texteditor angezeigt wird, enthält sie auch eine Liste der Änderungen, die übernommen werden. Überprüfen Sie diese Liste sorgfältig, um sicherzustellen, dass Sie nur die Änderungen übernehmen, die Sie übernehmen möchten.

Verwenden Sie Visual Studio außerdem nicht, um aktiv mit Git zu arbeiten. Es versucht, alte TFS-Begriffe auf Git-Operationen anzuwenden, aber das ist nicht dasselbe. Versuchen Sie stattdessen, Git auf der Konsole zu lernen. Visual Studio bietet einige nette Extras für schreibgeschütztes Arbeiten, wie beispielsweise eine großartige Diff-Ansicht.

verwandte Informationen