6291 Stimmen

Wie verwerfe ich nicht bereitgestellte Änderungen in Git?

Wie verwerfe ich Änderungen in meiner Arbeitskopie, die nicht im Index enthalten sind?

0 Stimmen

16 Stimmen

git-clean entfernt nur die nicht verfolgten Dateien aus dem Arbeitsbaum git-scm.com/docs/git-clean

37 Stimmen

Um den obigen Kommentar von Asenar zu verdeutlichen, git-clean -df kann gefährlich sein. Es löscht lokale, nicht verfolgte Dateien (z. B. solche, die durch eine .gitignore-Datei abgedeckt sind). Lesen Sie die folgenden Hinweise sorgfältig durch und erwägen Sie stattdessen git checkout .

39voto

Nick Punkte 1169

Anstatt die Änderungen zu verwerfen, habe ich meine Fernbedienung auf den Ursprung zurückgesetzt. Hinweis: Mit dieser Methode können Sie Ihren Ordner vollständig auf den des Repos zurücksetzen.

Also mache ich das, um sicherzustellen, dass sie nicht dort sitzen, wenn ich git reset (später - schließt gitignores auf dem Origin/branchname aus)

HINWEIS: Wenn Sie Dateien behalten wollen, die noch nicht getrackt wurden, aber nicht in GITIGNORE sind, können Sie diesen Schritt überspringen, da er diese nicht getrackten Dateien, die nicht in Ihrem entfernten Repository gefunden wurden, löscht (danke @XtrmJosh).

git add --all

Dann habe ich

git fetch --all

Dann habe ich auf den Ursprung zurückgesetzt

git reset --hard origin/branchname

Damit wären wir wieder am Anfang. Genau wie das erneute Klonen der Verzweigung, WÄHREND alle meine gitignored Dateien lokal und an Ort und Stelle zu halten.

Aktualisiert per Benutzerkommentar unten: Variation zum Zurücksetzen auf den aktuellen Zweig, in dem sich der Benutzer befindet.

git reset --hard @{u}

0 Stimmen

Dies ist meine bevorzugte Option, aber warum fügen Sie alle Änderungen zuerst hinzu? Soweit ich weiß, wird dadurch nur die Verzeichnisauflistung in den Git-Dateien geändert, während bei der Verwendung von git reset --hard diese ohnehin verloren geht, während die Verzeichnisse trotzdem entfernt werden.

0 Stimmen

Ich weiß nicht auf Mac oder Linux, github Windows Powershell manchmal lässt die Dateien dort nach dem Zurücksetzen. Ich denke, das liegt daran, dass ein Git-Reset alle Dateien im Repo auf den ursprünglichen Zustand zurücksetzt. Wenn sie nicht hinzugefügt werden, werden sie nicht berührt. Der Desktop-Client holt sich dann die Meldung "Hey, diese Datei ist hier drin und muss übertragen werden".

0 Stimmen

Das macht Sinn. Ich benutze Windows nicht, also habe ich dieses Problem nicht gesehen (ich habe Windows zumindest in den letzten Monaten nicht mehr benutzt, ich kann mich nicht an viel davor erinnern - es ist ein großer bedauerlicher Fleck). Es könnte sich lohnen, die Gründe dafür in Ihrer Hauptantwort zu erwähnen :)

36voto

artur Punkte 860

Ich habe alle oben genannten Lösungen ausprobiert, aber ich konnte die neuen, noch nicht bereitgestellten Dateien immer noch nicht loswerden.

Utilice git clean -f um diese neuen Dateien zu entfernen - aber mit Vorsicht! Beachten Sie die Option force.

34voto

SANGEETHA P.H. Punkte 787

Um einen permanenten Abwurf durchzuführen: git reset --hard

Um Änderungen für später zu speichern: git stash

25voto

Ben Wilde Punkte 5244

Verwenden Sie einfach:

git stash -u

Erledigt. Einfach.

Wenn Sie wirklich sich um Ihren Vorratsstapel kümmern, dann können Sie mit git stash drop . Aber an diesem Punkt sind Sie besser dran, wenn Sie (von Mariusz Nowak):

git checkout -- .
git clean -df

Nichtsdestotrotz, ich mag git stash -u die beste, weil sie alle nachverfolgten und nicht nachverfolgten Änderungen einfach "verwirft". ein Befehl . Dennoch git checkout -- . verwirft nur nachverfolgte Änderungen, und git clean -df verwirft nur nicht verfolgte Änderungen... und die Eingabe beider Befehle ist weit zu viel Arbeit :)

0 Stimmen

Anmerkung: git stash -u wird sich bald (Git 2.14.x/2.15, Q3 2017) ein wenig weiterentwickeln: stackoverflow.com/a/46027357/6309

0 Stimmen

Wenn ich die Frage des Auftraggebers richtig verstehe, sollten die indizierten Dateien beibehalten werden. Nur unstage Änderungen sollten entfernt werden. Also sollte es sein git stash -k meiner Meinung nach.

23voto

piyushmandovra Punkte 3911

Einfach sagen

git stash

Dadurch werden alle lokalen Änderungen entfernt. Sie können auch später verwenden, indem Sie sagen

git stash apply 

oder git stash pop

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