707 Stimmen

Verschiedene Möglichkeiten, lokale Git-Änderungen rückgängig zu machen

Ich habe gerade ein Git-Repository geklont und einen Branch ausgecheckt. Ich habe daran gearbeitet und dann beschlossen, alle meine lokalen Änderungen zu entfernen, da ich die originale Kopie haben wollte.

Kurz gesagt, musste ich die folgenden beiden Befehle ausführen, um meine lokalen Änderungen zu entfernen

git checkout .

git clean -f

Meine Frage ist,

(1) Ist dies der richtige Ansatz, um lokale Änderungen loszuwerden, oder lassen Sie mich wissen, wenn es einen anderen richtigen Ansatz gibt.

(2) wann verwenden wir git reset --hard, da ich ohne diesen Befehl auch zurücksetzen kann

Danke

*Lösung: Hauptbearbeitung(en): 03/26 : * Viele vage Begriffe durch git-spezifische Terminologie ersetzt [verfolgt/unverfolgt/bereit/nicht bereit]

Es gibt nur drei Kategorien von Dateien, wenn wir lokale Änderungen vornehmen:

Typ 1. Bereite verfolgte Dateien vor

Typ 2. Nicht bereite verfolgte Dateien

Typ 3. Nicht bereite nicht verfolgte Dateien auch als nicht verfolgte Dateien bezeichnet

  • Bereit - Dies sind Dateien, die in den Zwischenspeicher verschoben wurden/hinzugefügt wurden
  • Verfolgt - geänderte Dateien
  • Nicht verfolgt - neue Dateien. Immer unvorbereitet. Wenn sie in den Zwischenspeicher verschoben wurden, bedeutet dies, dass sie verfolgt werden.

Was jeder Befehl bewirkt:

  1. git checkout . - Entfernt nur nicht vorbereitete verfolgte Dateien [Typ 2]

  2. git clean -f - Entfernt nur nicht bereite nicht verfolgte Dateien [Typ 3]

  3. git reset --hard - Entfernt nur bereite verfolgte und nicht bereite verfolgte Dateien [Typ 1, Typ 2]

  4. git stash -u - Entfernt alle Änderungen [Typ 1, Typ 2, Typ 3]

Schlussfolgerung:

Es ist offensichtlich, dass wir entweder

(1) Kombination aus `git clean -f` und `git reset --hard` verwenden können

ODER

(2) `git stash -u`

um das gewünschte Ergebnis zu erzielen.

Hinweis: Beim Stashing, wie das Wort schon sagt, 'Etwas sicher und geheim an einem bestimmten Ort aufbewahren'. Dies kann jederzeit mit git stash pop abgerufen werden. Daher ist die Wahl zwischen den beiden obigen Optionen die Entscheidung des Entwicklers.

Vielen Dank an Christoph und Frederik Schøning.

Bearbeitung: 03/27

Ich dachte, es ist es wert, die Vorsicht Notiz zu git clean -f hinzuzufügen

git clean -f

Es gibt kein Zurück. Verwenden Sie -n oder --dry-run, um die Schäden zu sehen, die Sie verursachen werden.

Wenn Sie auch Verzeichnisse entfernen möchten, führen Sie git clean -f -d aus

Wenn Sie nur ignorierte Dateien entfernen möchten, führen Sie git clean -f -X aus

Wenn Sie sowohl ignorierte als auch nicht ignorierte Dateien entfernen möchten, führen Sie git clean -f -x aus

Referenz: Weitere Informationen zu git clean: Wie entfernt man lokale (nicht nachverfolgte) Dateien aus dem aktuellen Git-Arbeitsverzeichnis?

Bearbeitung: 05/20/15

Alle lokalen Commits auf diesem Branch verwerfen [Lokale Commits entfernen]

Um alle lokalen Commits auf diesem Branch zu verwerfen, um den lokalen Branch identisch mit dem "upstream" dieses Branchs zu machen, führen Sie einfach git reset --hard @{u} aus

Referenz: http://sethrobertson.github.io/GitFixUm/fixup.html

oder führen Sie git reset --hard origin/master aus [wenn der lokale Branch master ist]

Hinweis: 06/12/2015 Dies ist kein Duplikat der anderen SO-Frage, die als Duplikat markiert ist. Diese Frage behandelt, wie man lokale GIT-Änderungen entfernt [eine hinzugefügte Datei entfernen, Änderungen an einer vorhandenen Datei entfernen usw. und die verschiedenen Ansätze; Während der andere SO-Thread nur behandelt, wie man lokale Commits entfernt. Wenn Sie eine Datei hinzugefügt haben und diese allein entfernen möchten, diskutiert der andere SO-Thread dies nicht. Daher ist dieses nicht ein Duplikat des anderen.]

Bearbeitung: 06/23/15

Wie kann ein bereits in ein Remote-Repository gepuschter Commit rückgängig gemacht werden?

$ git revert ab12cd15

Bearbeitung: 09/01/2015

Einen früheren Commit vom lokalen Branch und Remote-Branch löschen

Fall: Sie haben gerade eine Änderung in Ihrem lokalen Branch committet und sofort in den Remote-Branch gepuscht, Plötzlich bemerkt, Oh nein! Ich brauche diese Änderung nicht. Was nun?

git reset --hard HEAD~1 [um diesen Commit vom lokalen Branch zu löschen]

git push origin HEAD --force [beide Befehle müssen ausgeführt werden. Um es aus dem Remote-Branch zu löschen]

Was ist der Branch? Es ist der aktuell ausgecheckte Branch.

Bearbeitung 09/08/2015 - Lokales Git-Merge entfernen:

Ich befinde mich auf dem master-Branch und habe den master-Branch mit einem neu erstellten Arbeitsbranch phase2 zusammengeführt

$ git status
# Im Branch master

$ git merge phase2

$ git status
# Im Branch master
# Ihr Branch liegt 8 Commits vor 'origin/master'.

Frage: Wie wird man diese Zusammenführung los? Habe git reset --hard und git clean -d -f ausprobiert Beides hat nicht funktioniert.

Das einzige, was funktionierte, sind die folgenden Optionen:

$ git reset --hard origin/master

oder

$ git reset --hard HEAD~8

oder

$ git reset --hard 9a88396f51e2a068bb7 [sha-Commit-Code - das ist der, der vorhanden war, bevor alle Ihre Zusammenführungs-Commits stattfanden]

2voto

bpedroso Punkte 3946

Der beste Weg ist, die Änderungen anzusehen.

Wenn Sie die Datei pom.xml in einem Projekt mit Namen Projektname ändern möchten, können Sie dies tun:

git status

# geändert:   Projektname/pom.xml

git checkout Projektname/pom.xml
git checkout master

# Dateien werden ausgecheckt: 100% (491/491), fertig.
# Branch master eingerichtet zum Verfolgen des remote Branch master von Ursprung.
# Zu einem neuen Branch 'master' gewechselt

2voto

Tatarin Punkte 1167

Für alles verwerfen ich mag es zu verstecken und dann dieses Versteck fallen zu lassen, ist der schnellste Weg, um alles zu verwerfen, besonders wenn du zwischen mehreren Repos arbeitest.

Dadurch werden alle Änderungen im {0} Schlüssel versteckt und sofort daraus entfernt {0}

git stash && git stash drop

1voto

Rizwan Punkte 3037

Zunächst überprüfen Sie, ob Ihre wichtige Änderung gespeichert ist oder nicht, indem Sie:

$ git status

dann versuchen Sie

$ git reset --hard

Es wird Ihren Branch auf den Standard zurücksetzen

aber wenn Sie nur rückgängig machen müssen:

$ edit (1) $ git add frotz.c filfre.c $ mailx (2) $ git reset
(3) $ git pull git://info.example.com/ nitfol


Mehr lesen >> https://git-scm.com/docs/git-reset

1voto

anupamkrishna Punkte 66

Option 1: Änderungen an verfolgten und unverfolgten Dateien verwerfen

Änderungen an sowohl im Index als auch nicht im Index befindlichen Dateien verwerfen.

$ git reset --hard [HEAD]

Dann unverfolgte Dateien gänzlich verwerfen (oder entfernen).

$ git clean [-f]

Option 2: Verstecken (stash)

Sie können Ihre Änderungen zunächst verstecken (stash)

$ git stash

Und dann entweder verwerfen oder wiederherstellen, je nachdem was Sie möchten. Siehe https://git-scm.com/docs/git-stash#_synopsis.

Option 3: Dateien manuell in ihren Originalzustand zurücksetzen

Zuerst wechseln wir zum Ziel-Zweig (branch)

$ git checkout 

Alle Dateien auflisten, die Änderungen haben

$ git status

Jede Datei manuell in ihren Originalzustand zurücksetzen

$ git restore

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X