Verschiedene Möglichkeiten, um lokale Git-Änderungen zu entfernen


625

Ich habe gerade ein Git-Repository geklont und einen Zweig ausgecheckt. Ich arbeitete daran und beschloss dann, alle meine lokalen Änderungen zu entfernen, da ich die Originalkopie haben wollte.

Kurz gesagt, ich musste die folgenden zwei 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 zu beseitigen, oder teilen Sie mir bitte den richtigen Ansatz mit.

(2) Wann verwenden wir, git reset --hardda ich auch ohne diesen Befehl zurücksetzen kann?

Vielen Dank

* Lösung: Hauptbearbeitung (en): 26.03.: * Viele vage Begriffe wurden durch eine git-spezifische Terminologie ersetzt [verfolgt / nicht verfolgt / inszeniert / nicht inszeniert]

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

Typ 1. Staged Tracked-Dateien

Typ 2. Nicht bereitgestellte verfolgte Dateien

Typ 3. Nicht bereitgestellte nicht verfolgte Dateien, auch bekannt als nicht verfolgte Dateien

  • Inszeniert - Diejenigen, die in den Staging-Bereich verschoben / Zum Index hinzugefügt werden
  • Verfolgt - geänderte Dateien
  • UnTracked - neue Dateien. Immer nicht inszeniert. Wenn inszeniert, bedeutet dies, dass sie verfolgt werden.

Was jeder Befehl tut:

  1. git checkout . - Entfernt NUR nicht bereitgestellte verfolgte Dateien [Typ 2]

  2. git clean -f - Entfernt NUR nicht bereitgestellte nicht verfolgte Dateien [Typ 3]

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

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

Fazit:

Es ist klar, dass wir beide verwenden können

(1) combination of `git clean -f` and `git reset --hard` 

ODER

(2) `git stash -u`

um das gewünschte Ergebnis zu erzielen.

Hinweis: Verstecken, da das Wort "etwas (sicher) sicher und geheim an einem bestimmten Ort aufbewahren" bedeutet. Dies kann immer mit abgerufen werden git stash pop. Die Wahl zwischen den beiden oben genannten Optionen ist also ein Aufruf des Entwicklers.

Vielen Dank an Christoph und Frederik Schøning.

Bearbeiten: 27.03

Ich dachte, es lohnt sich, auf die " Vorsicht " -Notiz zu achtengit clean -f

git clean -f

Es gibt kein Zurück. Verwenden Sie -noder, --dry-runum eine Vorschau des verursachten Schadens anzuzeigen.

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

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

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

Referenz: mehr zu git clean: Wie entferne ich lokale (nicht verfolgte) Dateien aus dem aktuellen Git-Arbeitsbaum?

Bearbeiten: 20.05.15

Alle lokalen Commits in diesem Zweig verwerfen [Lokale Commits entfernen]

Um alle lokalen Commits in diesem Zweig zu verwerfen und den lokalen Zweig mit dem "Upstream" dieses Zweigs identisch zu machen, führen Sie ihn einfach aus git reset --hard @{u}

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

oder tun git reset --hard origin/master[wenn lokale Niederlassung ist master]

Hinweis: 06/12/2015 Dies ist kein Duplikat der anderen SO-Frage, die als Duplikat markiert ist. Diese Frage befasst sich mit dem Entfernen lokaler GIT-Änderungen [Entfernen einer hinzugefügten Datei, Entfernen von Änderungen, die an einer vorhandenen Datei hinzugefügt wurden usw. und den verschiedenen Ansätzen; Wobei im anderen SO-Thread nur behandelt wird, wie das lokale Commit entfernt wird. Wenn Sie eine Datei hinzugefügt haben und diese alleine entfernen möchten, wird der andere SO-Thread nicht darüber diskutieren. Daher ist dies kein Duplikat des anderen]

Bearbeiten: 23.06.15

Wie kann ein bereits in ein Remote-Repository übertragenes Commit zurückgesetzt werden?

$ git revert ab12cd15

Bearbeiten: 01.09.2015

Löschen Sie ein vorheriges Commit aus dem lokalen Zweig und dem Remote-Zweig

Fall: Sie haben gerade eine Änderung an Ihrer lokalen Niederlassung vorgenommen und sind sofort zur Remote-Niederlassung gewechselt. Plötzlich wurde Ihnen klar: Oh nein! Ich brauche diese Änderung nicht. Jetzt was machen?

git reset --hard HEAD~1 [zum Löschen dieses Commits aus dem lokalen Zweig]

git push origin HEAD --force[Beide Befehle müssen ausgeführt werden. Zum Löschen aus der Gegenstelle]

Was ist die Branche? Es ist die aktuell ausgecheckte Filiale.

Edit 09/08/2015 - Lokale Git- Zusammenführung entfernen :

Ich bin in einer masterNiederlassung und habe eine masterNiederlassung mit einer neu arbeitenden Niederlassung zusammengeführtphase2

$ git status
# On branch master

$ git merge phase2

$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 8 commits.

F: Wie kann man diese Zusammenführung loswerden? Versucht git reset --hard und git clean -d -f beide haben nicht funktioniert.

Das einzige, was funktioniert hat, ist eines der folgenden:

$ git reset --hard origin/master

oder

$ git reset --hard HEAD~8

oder

$ git reset --hard 9a88396f51e2a068bb7 [sha Commit-Code - Dies ist der Code, der vorhanden war, bevor alle Ihre Merge-Commits stattfanden.]


1
Ich denke, dieser Thread könnte Ihre Fragen beantworten: stackoverflow.com/questions/1146973/…
Saucier

1
"git stash" entfernt alle vorgenommenen Änderungen.
John Ballinger

1
Schöne Zusammenfassung! Ich würde eine weitere Dateikategorie hinzufügen: "Typ 4. Ignorierte Dateien." git stash -a[oder --all] speichert auch die ignorierten und nicht verfolgten Dateien. git clean -xBereinigt auch ignorierte Dateien. git clean -Xbereinigt nur die ignorierten Dateien.
Jerry101

2
@JavaDev Ihre Frage war eher eine Antwort. Schätzen Sie, dass Sie weiter bearbeitet und alle Antworten zusammengestellt haben.
Bhavuk Mathur

1
danke ich habe alle 4 deiner Befehle ausgeführt, um lokale Änderungen rückgängig zu machen
Vincent Tang

Antworten:


505

Es hängt alles davon ab, was Sie rückgängig machen / zurücksetzen möchten. Beginnen Sie mit dem Lesen des Beitrags in Ubes Link . Aber um eine Antwort zu versuchen:

Hard Reset

git reset --hard [HEAD]

Entfernen Sie alle bereitgestellten und nicht bereitgestellten Änderungen an nachverfolgten Dateien vollständig.

Ich verwende häufig ein hartes Zurücksetzen, wenn ich denke, "mache einfach alles rückgängig, als hätte ich einen vollständigen Neuklon von der Fernbedienung durchgeführt". In Ihrem Fall, in dem Sie nur Ihr Repo makellos haben möchten, würde dies funktionieren.

Sauber

git clean [-f]

Entfernen Sie nicht verfolgte Dateien.

Zum Entfernen temporärer Dateien, aber beibehaltene und nicht bereitgestellte Änderungen an bereits verfolgten Dateien. In den meisten Fällen würde ich wahrscheinlich eine Ignorierregel erstellen, anstatt sie wiederholt zu bereinigen - z. B. für die Ordner bin / obj in einem C # -Projekt, die Sie normalerweise aus Platzgründen aus Ihrem Repo ausschließen möchten, oder ähnliches.

Die Option -f (force) entfernt auch Dateien, die nicht verfolgt werden und von git ignoriert werden, obwohl die Ignorierregel gilt. Im obigen Fall werden sie mit einer Ignorierregel, mit der die Ordner bin / obj niemals verfolgt werden sollen, mit der Option force aus Ihrem Dateisystem entfernt, obwohl diese Ordner von git ignoriert werden. Ich habe sporadisch eine Verwendung dafür gesehen, z. B. beim Bereitstellen von Skripten, und Sie möchten Ihren Code vor dem Bereitstellen, Zippen oder was auch immer bereinigen.

Git Clean berührt keine Dateien, die bereits verfolgt werden.

Kasse "Punkt"

git checkout .

Ich hatte diese Notation noch nie gesehen, bevor ich Ihren Beitrag gelesen hatte. Es fällt mir schwer, eine Dokumentation dafür zu finden (vielleicht kann jemand helfen), aber wenn ich ein bisschen herumspiele, sieht es so aus, als würde es bedeuten:

"Alle Änderungen in meinem Arbeitsbaum rückgängig machen".

Dh nicht bereitgestellte Änderungen in nachverfolgten Dateien rückgängig machen. Es berührt anscheinend keine inszenierten Änderungen und lässt nicht verfolgte Dateien in Ruhe.

Verstauen

Einige Antworten erwähnen das Verstauen. Wie der Wortlaut andeutet, würden Sie wahrscheinlich Stashing verwenden, wenn Sie sich mitten in etwas befinden (nicht bereit für ein Commit), und Sie müssen vorübergehend die Zweige wechseln oder irgendwie an einem anderen Status Ihres Codes arbeiten, um später zu Ihrem "chaotisch" zurückzukehren Schreibtisch". Ich sehe nicht, dass dies auf Ihre Frage zutrifft, aber es ist definitiv praktisch.

Um zusammenzufassen

Im Allgemeinen, wenn Sie sicher sind , haben Sie begangen und vielleicht zu einem entfernten wichtige Änderungen gedrückt, wenn Sie gerade spielen , um oder dergleichen, unter Verwendung git reset --hard HEADvon gefolgt git clean -fwird definitiv Ihren Code in den Zustand reinigen, wäre es in, war es nur geklont und aus einer Filiale ausgecheckt. Es ist wirklich wichtig zu betonen, dass durch das Zurücksetzen auch inszenierte, aber nicht festgeschriebene Änderungen entfernt werden. Es löscht alles, was nicht festgeschrieben wurde (außer nicht verfolgte Dateien, in diesem Fall verwenden Sie clean ).

Alle anderen Befehle dienen dazu, komplexere Szenarien zu ermöglichen, in denen eine Granularität des "Rückgängigmachens" erforderlich ist :)

Ich bin der Meinung, dass Ihre Frage Nr. 1 behandelt wird, aber zum Schluss noch die Schlussfolgerung Nr. 2: Der Grund, warum Sie nie die Notwendigkeit gefunden haben, sie zu verwenden, git reset --hardwar, dass Sie nie etwas inszeniert hatten. Hätten Sie eine Änderung inszeniert, hätte dies weder git checkout .noch git clean -frückgängig gemacht.

Hoffe das deckt ab.


Vielen Dank für den Grund für die Verwendung git reset --hard. Ich habe es ausprobiert und ja ... diese Dateien, die dem Index hinzugefügt wurden (Staging), wurden erst danach entfernt git reset --hard, und ich gehe davon aus, dass dies standardmäßig der Fall git reset --hardist git reset --hard head. Dieser Link ist auch hilfreich gitready.com/beginner/2009/01/18/the-staging-area.html
spiderman

Ich habe meine Antwort verbessert, warum ich git stash -uhier am sinnvollsten finde .
Christoph

2
Ich danke Ihnen beiden. Ich habe die Antwort zusammengefasst und in meine Frage eingebettet. Christoph ließ mich wissen, was es git stash -utut und wie es zu knallen ist, aber Frederik ließ mich wissen, dass es hart zurückgesetzt wurde und die Kombination von git reset --hardund verwendete git clean -f, und warum nicht, stashwird in einigen Szenarien bevorzugt. Bitte helfen Sie mir bei der Auswahl, welche ich als Antwort markieren soll :), beide sind meine Antworten.
Spiderman

3
.ist eine Pfadspezifikation, die sich auf das aktuelle Arbeitsverzeichnis bezieht, das möglicherweise das Stammverzeichnis des Repos ist. Von git-scm.com: git checkout [<tree-ish>] [--] <pathspec>…Aktualisiert die benannten Pfade im Arbeitsbaum aus der Indexdatei oder aus einem benannten <Baum>.
Jerry101

3
Es wird nie genug betont, dass sowohl git reset --hardund git clean -dfxals auch dergleichen destruktiv sind . Wie auch immer, bitte korrigieren Sie den Kleinbuchstaben headin der Antwort, er sollte entweder in Großbuchstaben HEADoder überhaupt nicht vorhanden sein.
Pavel Šimerda

25

Grund für das Hinzufügen einer Antwort in diesem Moment:

Bisher habe ich die Schlussfolgerung und die 'Antworten' zu meiner ursprünglichen Frage selbst hinzugefügt, wodurch die Frage sehr langwierig wurde und daher zu einer separaten Antwort übergegangen wurde.

Ich habe auch häufiger verwendete Git-Befehle hinzugefügt , die mir bei Git helfen, um auch jemand anderem zu helfen.

Grundsätzlich alle lokalen Commits zu reinigen $ git reset --hardund $ git clean -d -f


Der erste Schritt, bevor Sie Commits ausführen, besteht darin, Ihren Benutzernamen und Ihre E-Mail-Adresse zu konfigurieren, die zusammen mit Ihrem Commit angezeigt werden.

# Legt den Namen fest, den Sie an Ihre Festschreibungstransaktionen anhängen möchten

$ git config --global user.name "[name]"

# Legt die E-Mail fest, die an Ihre Commit-Transaktionen angehängt werden soll

$ git config --global user.email "[email address]"

#Listen Sie die globale Konfiguration auf

$ git config --list

#Listen Sie die Remote-URL auf

$ git remote show origin

#Status überprüfen

git status

#Listen Sie alle lokalen und Remote-Zweige auf

git branch -a

#Erstellen Sie einen neuen lokalen Zweig und beginnen Sie mit der Arbeit an diesem Zweig

git checkout -b "branchname" 

oder es kann als zweistufiger Prozess durchgeführt werden

Zweig erstellen: git branch branchname Arbeiten Sie an diesem Zweig:git checkout branchname

# lokale Änderungen festschreiben [zweistufiger Prozess: - Hinzufügen der Datei zum Index, dh Hinzufügen zum Staging-Bereich. Übernehmen Sie dann die Dateien, die in diesem Staging-Bereich vorhanden sind.]

git add <path to file>

git commit -m "commit message"

#checkout eine andere lokale Niederlassung

git checkout "local branch name"

#Entfernen Sie alle Änderungen in der lokalen Verzweigung [Angenommen, Sie haben einige Änderungen in der lokalen Verzweigung vorgenommen, z. B. das Hinzufügen einer neuen Datei oder das Ändern einer vorhandenen Datei oder ein lokales Commit, benötigen dies jedoch nicht mehr] git clean -d -fund git reset --hard [bereinigen Sie alle lokalen Änderungen, die an der lokalen Verzweigung vorgenommen wurden, außer wenn lokales Commit]

git stash -u entfernt auch alle Änderungen

Hinweis: Es ist klar, dass wir entweder (1) Kombination von git clean –d –fund git reset --hard ODER (2) verwenden können git stash -u , um das gewünschte Ergebnis zu erzielen.

Anmerkung 1: Verstauen, da das Wort "etwas (sicher) sicher und geheim an einem bestimmten Ort aufbewahren" bedeutet. Dies kann immer mit Git Stash Pop abgerufen werden. Die Wahl zwischen den beiden oben genannten Optionen ist also ein Aufruf des Entwicklers.

Hinweis 2: git reset --hardLöscht Änderungen am Arbeitsverzeichnis. Stellen Sie sicher, dass Sie alle lokalen Änderungen aufbewahren, die Sie behalten möchten, bevor Sie diesen Befehl ausführen.

# Wechseln Sie zur Hauptniederlassung und stellen Sie sicher, dass Sie auf dem neuesten Stand sind.

git checkout master

git fetch [Dies kann erforderlich sein (abhängig von Ihrer Git-Konfiguration), um Updates zu Origin / Master zu erhalten.]

git pull

# Führen Sie den Feature-Zweig in den Hauptzweig ein.

git merge feature_branch

# Setzen Sie den Hauptzweig auf den Ursprungsstatus zurück.

git reset origin/master

# Versehentlich eine Datei aus dem lokalen gelöscht, wie kann man sie wieder abrufen? git statusFühren Sie a aus , um den vollständigen Dateipfad der gelöschten Ressource abzurufen

git checkout branchname <file path name>

das ist es!

# Hauptzweig mit einem anderen Zweig zusammenführen

git checkout master
git merge someotherbranchname

#rename lokaler Zweig

git branch -m old-branch-name new-branch-name

# lokalen Zweig löschen

git branch -D branch-name

# Remote-Zweig löschen

git push origin --delete branchname

oder

git push origin :branch-name

# ein Commit zurücksetzen, das bereits in ein Remote-Repository übertragen wurde

git revert hgytyz4567

#branch von einem früheren Commit mit GIT

git branch branchname <sha1-of-commit>

#Change Commit-Nachricht des letzten Commits, das bereits auf Remote übertragen wurde

git commit --amend -m "new commit message"
git push --force origin <branch-name>

# Alle lokalen Commits in diesem Zweig verwerfen [Lokale Commits entfernen]

Um alle lokalen Commits in diesem Zweig zu verwerfen und den lokalen Zweig mit dem "Upstream" dieses Zweigs identisch zu machen, führen Sie ihn einfach aus

git reset --hard @{u}

Referenz: http://sethrobertson.github.io/GitFixUm/fixup.html oder do git reset --hard origin/master[wenn der lokale Zweig Master ist]

# Ein Commit zurücksetzen, das bereits in ein Remote-Repository übertragen wurde?

$ git revert ab12cd15

# Löschen Sie ein vorheriges Commit vom lokalen Zweig und vom Remote-Zweig

Anwendungsfall: Sie haben gerade eine Änderung in Ihrer lokalen Niederlassung vorgenommen und sofort in die entfernte Niederlassung verschoben. Plötzlich wurde Ihnen klar: Oh nein! Ich brauche diese Änderung nicht. Jetzt was machen?

git reset --hard HEAD~1[zum Löschen dieses Commits aus dem lokalen Zweig. 1 bezeichnet das EINE Commit, das Sie gemacht haben]

git push origin HEAD --force[Beide Befehle müssen ausgeführt werden. Zum Löschen aus der Gegenstelle]. Der aktuell ausgecheckte Zweig wird als der Zweig bezeichnet, in dem Sie diesen Vorgang ausführen.

#Löschen Sie einige der letzten Commits aus dem lokalen und Remote-Repo und behalten Sie das gewünschte Commit bei. (eine Art Zurücksetzen von Commits von lokal und remote)

Nehmen wir an, Sie haben 3 Commits, die Sie an den Remote-Zweig mit dem Namen ' develop' gesendet haben.

commitid-1 done at 9am
commitid-2 done at 10am
commitid-3 done at 11am. // latest commit. HEAD is current here.

Zurück zum alten Commit (um den Status der Verzweigung zu ändern)

git log --oneline --decorate --graph // um alle deine Commitids zu sehen

git clean -d -f // alle lokalen Änderungen bereinigen

git reset --hard commitid-1 // lokal auf dieses Commitid zurückgreifen

git push -u origin +develop// diesen Status auf Remote verschieben. + Force Push

# Lokale Git-Zusammenführung entfernen: Fall: Ich bin im Hauptzweig und habe den Hauptzweig mit einer neu funktionierenden Zweigphase2 zusammengeführt

$ git status

Auf Zweigstamm

$ git merge phase2 $ git status

Auf Zweigstamm

Ihre Filiale liegt 8 Commits vor 'origin / master' .

F: Wie kann man diese lokale Git-Zusammenführung loswerden? Versucht git reset --hardund git clean -d -fbeide haben nicht funktioniert. Das einzige, was funktioniert hat, ist eines der folgenden:

$ git reset - harter Ursprung / Master

oder

$ git reset --hard HEAD ~ 8

oder

$ git reset --hard 9a88396f51e2a068bb7 [sha Commit-Code - Dies ist der Code, der vorhanden war, bevor alle Ihre Merge-Commits stattfanden.]

# Gitignore-Datei erstellen

touch .gitignore // Erstelle die Datei in Mac- oder Unix-Benutzern

Beispielinhalt von .gitignore:

.project
*.py
.settings

Referenzlink zum GIT-Spickzettel: https://services.github.com/on-demand/downloads/github-git-cheat-sheet.pdf


1
Ihr Befehl zum Löschen des Remote-Zweigs ist möglicherweise nicht der beste . Sie verwenden git push origin :branch-namejedoch ich empfehle die Verwendung vongit push origin --delete branchname
vibs2006

Zustimmen, i mit Ihrem Vorschlag aktualisiert, danke @ vibs2006
spiderman

21

Wie bei allem in Git gibt es mehrere Möglichkeiten, dies zu tun. Die beiden von Ihnen verwendeten Befehle sind eine Möglichkeit, dies zu tun. Eine andere Sache, die Sie hätten tun können, ist, sie einfach damit zu verstauen git stash -u. Das -ustellt sicher , dass neu hinzugefügte Dateien (untracked) sind ebenfalls enthalten.

Das Praktische daran git stash -uist das

  1. Es ist wahrscheinlich der einfachste (einzige?) Einzelbefehl, um Ihr Ziel zu erreichen
  2. Wenn Sie Ihre Meinung danach ändern, erhalten Sie Ihre gesamte Arbeit zurück git stash pop(es ist wie das Löschen einer E-Mail in Google Mail, die Sie einfach rückgängig machen können, wenn Sie Ihre Meinung danach ändern).

Ab Ihrer anderen Frage git reset --hardwerden die nicht verfolgten Dateien nicht entfernt, sodass Sie die weiterhin benötigen git clean -f. Aber a git stash -ukönnte am bequemsten sein.


git reset --hardnicht untracked entfernen Dateien in der Tat, aber es wird nicht verfolgte Änderungen zu entfernen, ändert sich also auf Dateien, die bereits im Index enthalten sind. Ich bin sicher, das hast du gemeint :)
Frederik Struck-Schøning

Als ich benutzte git stash -u, sah ich diese Antwort von Git Bash. "Gespeichertes Arbeitsverzeichnis und Indexstatus WIP auf {branchname}. Möglicherweise können wir dieses gespeicherte Verzeichnis mit abrufen git stash pop.
Spiderman

Ich danke Ihnen beiden. Ich habe die Antwort zusammengefasst und in meine Frage eingebettet. Christoph ließ mich wissen, was es git stash -utut und wie es zu knallen ist, aber Frederik ließ mich wissen, dass es hart zurückgesetzt wurde und die Kombination von git reset --hardund verwendete git clean -f, und warum nicht, stashwird in einigen Szenarien bevorzugt. Bitte helfen Sie mir bei der Auswahl, welche ich als Antwort markieren soll :), beide sind meine Antworten.
Spiderman

Aber was ist, wenn ich meinem Repository eine Datei hinzugefügt habe, die ich nicht verfolgen möchte? nur in meinem repo. Wenn ich es zur Ignorierliste hinzufüge, muss ich eine .ignore-Datei festschreiben, die sich auch auf alle anderen auswirkt.
user20358

7

1. Wenn Sie Ihre lokalen Änderungen überhaupt nicht beibehalten möchten.

git reset --hard

Dieser Befehl entfernt alle lokalen Änderungen vollständig aus Ihrem lokalen Repository. Dies ist der beste Weg, um Konflikte während des Pull-Befehls zu vermeiden, nur wenn Sie Ihre lokalen Änderungen überhaupt nicht beibehalten möchten.

2. Wenn Sie Ihre lokalen Änderungen beibehalten möchten

Wenn Sie die neuen Änderungen von der Fernbedienung abrufen und die lokalen Änderungen während dieses Abrufs ignorieren möchten, dann

git stash

Es werden alle lokalen Änderungen gespeichert. Jetzt können Sie die Remote-Änderungen abrufen.

git pull

Jetzt können Sie Ihre lokalen Änderungen zurückbringen, indem Sie:

git stash pop

1
git reset --hardentfernt nicht alle lokalen Änderungen. Es werden nur die Änderungen entfernt. Wenn Sie Adds entfernen möchten, müssen Sie auchgit clean -fd
John Henckel


4

Ich denke, Git hat eine Sache, die nicht klar dokumentiert ist. Ich denke, es wurde tatsächlich vernachlässigt.

git checkout .

Mann, du hast meinen Tag gerettet. Ich habe immer Dinge, die ich mit dem geänderten Code versuchen möchte. Aber manchmal führen die Dinge dazu, dass der geänderte Code durcheinander gebracht wird, neue nicht verfolgte Dateien hinzugefügt werden usw. Ich möchte also das inszenieren, was ich will, die unordentlichen Dinge erledigen, dann schnell aufräumen und festschreiben, wenn ich glücklich bin.

Es git clean -fdfunktioniert gut für nicht verfolgte Dateien.

Dann git resetentfernt einfach inszeniert, ist aber etwas git checkoutzu umständlich. Es ist nicht immer ideal, eine Datei einzeln anzugeben oder Verzeichnisse zu verwenden. Manchmal befinden sich die geänderten Dateien, die ich entfernen möchte, in Verzeichnissen, die ich behalten möchte. Ich wünschte mir diesen einen Befehl, der nur nicht bereitgestellte Änderungen entfernt, und hier sind Sie. Vielen Dank.

Aber ich denke, sie sollten einfach git checkoutohne Optionen sein, alle nicht bereitgestellten Änderungen entfernen und die inszenierten nicht berühren. Es ist irgendwie modular und intuitiv. Eher wie was git resetmacht. git cleansollte auch das gleiche tun.


2

Am besten überprüfen Sie die Änderungen.

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

git status

# modified:   project-name/pom.xml

git checkout project-name/pom.xml
git checkout master

# Checking out files: 100% (491/491), done.
# Branch master set up to track remote branch master from origin.
# Switched to a new branch 'master'

2

Wenn Sie alles verwerfen möchten, was ich gerne verstauen und ablegen möchte, ist dies der schnellste Weg, um alles zu verwerfen, insbesondere wenn Sie zwischen mehreren Repos arbeiten.

Dadurch werden alle Änderungen im {0}Schlüssel gespeichert und sofort gelöscht{0}

git stash && git stash drop


1

Überprüfen Sie zunächst, ob Ihre wichtige Änderung gespeichert wurde oder nicht durch:

$ git status

als versuchen

$ git reset --hard

Ihr Zweig wird auf die Standardeinstellungen zurückgesetzt

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


Lesen Sie mehr >> https://git-scm.com/docs/git-reset


Randnotiz: Zurücksetzen --hard ist ein gefährlicher Befehl, der alle Änderungen entfernt und nicht rückgängig gemacht werden kann. Der Benutzer sollte sich bewusst sein, wenn er Reset Hard verwendet.
Danglingpointer
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.