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:
-
git checkout .
- Entfernt nur nicht vorbereitete verfolgte Dateien [Typ 2] -
git clean -f
- Entfernt nur nicht bereite nicht verfolgte Dateien [Typ 3] -
git reset --hard
- Entfernt nur bereite verfolgte und nicht bereite verfolgte Dateien [Typ 1, Typ 2] -
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]