Wie kann ich verwerfen unstaged änderungen im Git?
Wie kann ich das verwerfen von änderungen in meine arbeiten zu kopieren, die nicht im index?
Siehe auch stackoverflow.com/questions/22620393/...
Zu klären Asenar Kommentar oben
"git clean-df' gewarnt Werden! Ich habe versucht, und verlorene Schlüssel (Ordner, die nicht wiederhergestellt werden können... Autsch!
schlagen
git-clean
entfernt nur nicht verfolgte Dateien aus dem working tree git-scm.com/docs/git-cleanZu klären Asenar Kommentar oben
git-clean -df
gefährlich werden kann. Löschen lokalen nicht verfolgte Dateien (z.B. abgedeckt .gitignore) Lesen Sie unten sorgfältig durch und Bedenken Sie git checkout . statt"git clean-df' gewarnt Werden! Ich habe versucht, und verlorene Schlüssel (Ordner, die nicht wiederhergestellt werden können... Autsch!
schlagen
git status
gibt einen Vorschlag, wie das zu tun! git checkout -- .
InformationsquelleAutor Readonly | 2008-09-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ein weiterer schneller Weg ist:
Brauchen Sie nicht zu zählen
--include-untracked
wenn Sie nicht wollen, um gründlich zu sein darüber.Danach können Sie drop stash mit einem
git stash drop
Befehl, wenn Sie möchten.--include-untracked
als gut.Die Frage fordert insbesondere über die änderungen, die nicht im index. Die
git reset
Befehl wird das verwerfen von änderungen in den index zu.git checkout -- . ist viel schneller
Weder die
git stash
noch eine Vielzahl vongit checkout
zu verwerfen unstaged löscht. Nach der Ausgabe vongit status
die tatsächliche richtige Antwort hier ist einige Geschmackgit reset HEAD
Diese verschmutzen die stash-stack.
git checkout -- .
macht den job mit einem Befehl nur.InformationsquelleAutor Greg Hewgill
Für alle unstaged Dateien im aktuellen Arbeitsverzeichnis verwenden:
Für eine bestimmte Datei verwenden:
--
hier, um zu entfernen argument ambiguation.git status
Funktioniert nicht, wenn es nicht verfolgte Dateien. Git sagt
error: The following untracked working tree files would be overwritten by checkout: ...
.newbie-Frage, was bedeutet "git checkout -- ." bedeutet semantisch?
checkout -- . bedeutet, dass die gleiche Sache wie
git checkout .
, außer Sie sind explizit über die Tatsache, dass Sie nicht die Angabe der branch-name. Beide sagen Kasse die HEAD-version auf der Filiale bin ich momentan für '.' oder './'. Wenn Siegit checkout branch-name directory-or-file-name
in der Regel erhalten Sie die HEAD-version desdirectory-or-file-name
auf Zweigbranch-name
.IMO ist diese Variante nicht perfekt, da es nicht handhaben die situation, wenn Ihr repository geändert wird, nicht auf die HEAD-revision auf den moment verpasst Reinigung, und Sie NICHT wollen, Sie zu aktualisieren, zu KOPF, und wollen einfach nur reinigen Sie die änderungen.
InformationsquelleAutor Tobi
Wie es scheint, die vollständige Lösung:
git clean
entfernt alle nicht verfolgte Dateien (Warnung: es wird zwar nicht löschen, ignoriert erwähnten Dateien direkt in .gitignore, es löschen kann, ignoriert Dateien, die im Ordner) undgit checkout
löscht alle unstaged changes.dies ist becues der erste Befehl entfernt die nicht indizierte Dateien und die zweite entfernt die unstaged changes (indizierte Dateien). Also, wenn Sie nicht irgendeine inszenierte änderungen ist es das gleiche wie das zurücksetzen auf den letzten commit mit
git reset --hard
mit -dff wenn die nicht verfolgte Verzeichnis ein git-clone.
Seien Sie vorsichtig, läuft git clean-df. Wenn Sie nicht verstehen, was es tut, könnten Sie das löschen von Dateien, die Sie bedeuten, zu halten, wie robots.txt, hochgeladenen Dateien, etc.
Wie @ctlockey gesagt, der erste Befehl, den Sie auch Verzeichnisse zu löschen, wenn Sie zusammengesetzt sind, die ignoriert nur Dateien... Verlor eine ganze Reihe von Konfigurations-Dateien auf meinem Projekt 🙁 Vorsicht.
InformationsquelleAutor Mariusz Nowak
Dieser checkt den aktuellen index für das aktuelle Verzeichnis, wegwerfen alle änderungen an den Dateien aus dem aktuellen Verzeichnis nach unten.
oder diese, die checkt alle Dateien aus dem index, überschreiben, arbeiten, Baum-Dateien.
git checkout .
undgit checkout -- .
?Kein Unterschied in diesem Fall.
Siemer und im Allgemeinen Fall?
schlechter Ort, um diese Frage zu stellen. – Sie ist unabhängig von der Frage des OP an, und nicht auf die Antwort hier.
+1 Das ist die RICHTIGE ANTWORT, wie es richtig behandelt den Fall, in dem einige Dateien haben beide inszeniert von und ungespielt änderungen. Beachten Sie, dass diese Lösung VERWIRFT die unstaged changes; wenn Sie es wünschen, Sie zu behalten, dann sollten Sie @greg hewgill 's Antwort
git stash save --keep-index
.InformationsquelleAutor CB Bailey
Reinigt die Arbeits-tree rekursiv durch entfernen von Dateien die nicht unter Versionskontrolle, beginnend mit dem aktuellen Verzeichnis.
-d
: Entfernen Sie nicht die Verzeichnisse zusätzlich zu nicht verfolgte Dateien-f
: Kraft (möglicherweise nicht erforderlich, abhängig vonclean.requireForce
Einstellung)Laufen
git help clean
um die manuelleInformationsquelleAutor Elvis Ciotti
Mein Favorit ist
Können Sie selektiv wiederherstellen Brocken.
Siehe auch:
Dies ist, was ich verwenden. git checkout -p und dann "a", um alle akzeptieren.
Ich hab nie darüber nachgedacht. Dass
-p
fügt eine nette zusätzliche Schicht von Sicherheit. Kombinieren Sie es mitgit clean -d
tatsächlich Antwort OP.InformationsquelleAutor Ben
Da keine Antwort schlägt vor, die genaue option Kombination, die ich benutze, hier ist es:
Dies ist der online-Hilfetext für die verwendeten
git clean
Optionen:-d
Entfernen Sie nicht die Verzeichnisse zusätzlich zu nicht verfolgte Dateien. Wenn ein nicht-Verzeichnis verwaltet wird, durch ein anderes Git-repository, ist es nicht standardmäßig entfernt. Verwenden
-f
option, zweimal, wenn Sie wirklich wollen, zu entfernen, wie ein Verzeichnis.-f
Wenn die Git-Konfiguration variable
clean.requireForce
ist nicht auffalse
, Git clean weigern, zu löschen Dateien oder Verzeichnisse, es sei denn gegeben-f
,-n
oder-i
. Git wird sich weigern, zu löschen, Verzeichnisse innerhalb der.git
Unterverzeichnis oder eine Datei, es sei denn, eine zweite-f
gegeben ist.-x
Nicht die Regeln ignorieren von
.gitignore
(pro Verzeichnis) und die$GIT_DIR/info/exclude
, aber verwenden immer noch das ignorieren von Regeln, die mit-e
Optionen. Dies ermöglicht das entfernen aller nicht von Dateien, einschließlich der build-Produkte. Dies kann verwendet werden (möglicherweise in Verbindung mitgit reset
) zum erstellen einer unberührten Arbeitsverzeichnis zum testen eine saubere bauen.Auch
git checkout .
getan werden muss in den root von der repo.git reset --hard
statt? (was ist eigentlich äquivalent zugit reset --hard HEAD
und sollte funktionieren, je nachdem, was das aktuelle Verzeichnis...)Auch in Bezug auf den ersten Befehl
git clean -dfx
, hier ist ein Tipp, den ich nutzen, um auf der sicheren Seite, bevor es läuft: laufen Sie einfachgit clean -d -x -n
vor, um die Liste der Dateien-zu-sein-entfernt werden, dann bestätigen Sie den Vorgang durch ausführen vongit clean -d -x -f
(ich habe das argument-n
, resp.-f
am Ende in der Lage sein, schnell zu ändern, es in einem terminal)Schnelle beachten Sie, dass dies unreversable, und wenn Sie Dateien in
.gitignore
Sie werden Sie verlieren. Also Sie sollten eine Sicherungskopie Ihres Projekts, bevor Sie diese.InformationsquelleAutor Martin G
Ich wirklich fand diesen Artikel hilfreich für die Erklärung, Wann welcher Befehl: http://www.szakmeister.net/blog/2011/oct/12/reverting-changes-git/
Gibt es ein paar Fälle zu unterscheiden:
Wenn Sie nicht inszeniert die Datei, dann verwenden Sie
git checkout
. Kasse "updates, die Dateien in das arbeiten im Baum mit der version in den index". Wenn die Dateien nicht inszeniert worden (auch in den index aufgenommen)... dieser Befehl wird im wesentlichen wiederherstellen der Dateien, was die Letzte commit war.git checkout -- foo.txt
Wenn Sie inszeniert die Datei, dann verwenden Sie git reset. Änderungen zurücksetzen des index übereinstimmen, einem commit.
git reset -- foo.txt
Ich vermute, dass mit
git stash
ist eine beliebte Wahl, da es ein wenig weniger gefährlich. Sie können immer gehen, um es zurück, wenn Sie versehentlich einem Schlag zu viel von sich bei der Verwendung von git reset. Reset ist standardmäßig rekursiv.Werfen Sie einen Blick auf den Artikel oben für weitere Hinweise.
InformationsquelleAutor blak3r
Der einfachste Weg, dies zu tun ist durch die Verwendung dieses Befehls:
Dieser Befehl wird verwendet, um discard changes in working directory -
https://git-scm.com/docs/git-checkout
In der git-Befehl, lagern von nicht verfolgte Dateien wird erreicht durch die Verwendung:
http://git-scm.com/docs/git-stash
.
am Ende. Um die Zukunft zu mir: die Zeit ist essentiell!Ich brauchte, um loszuwerden, alle lokalen änderungen, die in einem sub-Verzeichnis, ohne bläst Weg alle anderen ändern. Diese Antwort hat mir sehr geholfen, vielen Dank
Bitte beschreiben Sie, was die beiden Befehle machen. Es ist wirklich hilfreich, habe keine Erklärung.
ausgezeichnet. die Kasse hat in einem Befehl, was die beliebtesten man muss in zwei. kann auch verfolgt werden, mit
git clean -fd
um saubere Dateien nicht in den index.Dies ist die einzige, die für mich gearbeitet.
InformationsquelleAutor A H M Forhadul Islam
Wenn Sie möchten nur zu entfernen, änderungen an vorhandenen Dateien, verwenden Sie
checkout
(hier dokumentiert).--
) sagt Git, dass das, was folgt, sollte sein genommen als zweites argument (Pfad), die Sie übersprungen Spezifikation einer Filiale..
) zeigt an, dass alle Pfade.Wenn Sie möchten, zum entfernen von Dateien Hinzugefügt seit dem letzten commit verwenden
clean
(hier dokumentiert):-i
option löst einen interaktivenclean
, um zu verhindern, dass irrtümliche Löschungen.Wenn Sie es wünschen zu bewegen, änderungen an einem Betrieb Platz für den späteren Zugriff, verwenden Sie
stash
(hier dokumentiert):InformationsquelleAutor jtheletter
Wenn Sie nicht daran interessiert sind, halten die unstaged changes (vor allem, wenn die bereitgestellte änderungen sind neue Dateien), ich fand das praktisch:
InformationsquelleAutor Joshua Kunzmann
Als Sie geben git status,
(benutzen Sie "git checkout -- ..." to discard changes in working directory)
dargestellt.
z.B.
git checkout -- .
Natürlich ist die korrekte Befehl "git checkout -- ." ein einzelner Punkt. In den Kommentar, die drei Punkte waren eine grammatikalische Sache, zu zeigen, dass es viele andere Optionen, die benutzt worden sein könnte..
InformationsquelleAutor Erdem ÖZDEMİR
git checkout -f
man git-checkout
:-f, --force
Beim Umschalten der Zweige, fortfahren, selbst wenn der index oder die Arbeits-Baum unterscheidet sich von KOPF. Diese wird verwendet, um wegwerfen lokalen änderungen.
Beim Check-out Wege aus dem index, nicht auf individueller Einträge; statt, nicht zusammengeführte Einträge werden ignoriert.
InformationsquelleAutor Bijan
Können Sie mithilfe von git stash - wenn etwas schief geht, können Sie immer noch wiederherstellen aus dem stash.
Ähnlich wie einige andere hier beantworten, aber das entfernt auch alle unstaged Dateien und auch alle unstaged gelöscht:
wenn Sie überprüfen, dass alles OK ist, werfen Sie die stash away:
Die Antwort von Bilal Maqsood mit
git clean
auch für mich gearbeitet, aber mit den stash habe ich mehr Kontrolle - wenn ich JMD zufällig, ich kann immer noch meine änderungen wiederUPDATE
Ich denke, es ist 1 mehr ändern (weiß nicht, warum dies für mich gearbeitet, bevor):
git add . -A
stattgit add .
ohne die
-A
die entfernten Dateien werden nicht inszeniertInformationsquelleAutor Asped
Statt verwerfen der änderungen, ich änder meine Fernbedienung, um die Herkunft. Hinweis - diese Methode ist vollständig wiederherstellen den Ordner zu, dass der repo.
Damit ich dies tun, um sicherzustellen, dass Sie nicht dort sitzen, wenn ich mit git reset (später - schließt gitignores auf die Herkunft/branchname)
HINWEIS: Wenn Sie möchten, um Dateien, die noch nicht verfolgt, aber nicht in GITIGNORE können Sie möchten diesen Schritt überspringen, wie es wird, Wischen Sie diese nicht verfolgte Dateien, die nicht auf Ihrer remote-repository (danke @XtrmJosh).
Dann Habe Ich
Dann habe ich reset Ursprung
Setzen, wird es wieder auf Platz eins. Genau wie RE-Klonen der Zweig, WÄHREND alle meine gitignored Dateien lokal und im Ort.
Aktualisiert pro user-Kommentar:
Variation zurücksetzen, um unabhängig von aktuellen Zweig des Benutzers auf.
Ich nicht auf mac-oder linux -, github-windows-powershell-manchmal werden die Blätter und die Dateien dort nach dem reset. Ich denke, dass seine weil git reset setzt alle Dateien in der repo in seinen ursprünglichen Zustand. Wenn theyre nicht Hinzugefügt, Sie sind nicht berührt. Der desktop-client, dann wird der pickup "hey, diese Datei ist im hier und muss begangen werden"
Sinn machte. Ich benutze nicht Windows, so habe nicht gesehen, dieses Problem (noch nicht verwendet von Windows für die letzten paar Monate zumindest, erinnere mich nicht an viel vor, dass - es eine riesige bedauerlich, blur). Vielleicht erwähnenswert ist die Begründung in der Antwort 🙂
Ich rannte über dieses Problem auf einem Mac jetzt auch. Wenn die Datei nicht verfolgt in den Repo-manchmal git reset nicht berührt. Kann ich nicht wirklich isolieren, die das "WARUM" aber wenn das passiert, wenn ich reset, und ich habe noch 1 uncommitted-Datei oder zwei, ich fügen Sie --alle-und reset --hard wieder
Eine nette kleine variation, die ich mag, ist
git reset --hard @{u}
die setzt den Zweig an, wo die aktuelle remote-tracking-branch istInformationsquelleAutor Nick
Habe versucht, alle oben genannten Lösungen, aber immer noch nicht abschütteln konnte neue, unstaged Dateien.
Verwenden
git clean -f
zu entfernen, werden diese neuen Dateien - mit Vorsicht aber! Hinweis: die option force.InformationsquelleAutor artur
einfach sagen
Damit entfernen Sie alle Ihre lokalen änderungen. Sie auch später verwenden können, indem Sie sagen,
bzw.
git stash pop
InformationsquelleAutor piyushmandovra
Verwenden Sie einfach:
Getan. Einfach.
Wenn Sie wirklich kümmern uns um Ihre stash-stack dann können Sie mit
git stash drop
. Aber an diesem Punkt sind Sie besser dran mit (von Mariusz Nowak):Dennoch, ich mag
git stash -u
die beste, weil es "verwirft" alle verfolgte und nicht verfolgte änderungen in nur einem Befehl. Nochgit checkout -- .
nur verwirft, nachverfolgte änderungen,und
git clean -df
nur verwirft nicht verpasst... und die Eingabe beider Befehle ist weit zu viel Arbeit 🙂git stash -u
bald (Git 2.14.x/2.15, Q3 2017) entwickeln sich etwas: stackoverflow.com/a/46027357/6309Wenn ich die Frage des OP richtig indizierten Dateien aufbewahrt werden sollen. Nur unstage Veränderungen sollten entfernt werden. So sollte
git stash -k
meiner Meinung nach.InformationsquelleAutor Ben Wilde
Dies funktioniert sogar in Verzeichnissen, sind; die außerhalb der normalen git-Berechtigungen.
Mir kürzlich passiert ist
Sie irren, Lesen Sie bitte
git help clean
"-d Entfernen Sie nicht die Verzeichnisse zusätzlich zu nicht verfolgte Dateien."Warum haben Sie alle Ihre Dateien, zum Welt-Lesen/schreiben? Keine gute Praxis.
mein bad, 664 korrekt ist? Sie sind auch herzlich eingeladen zum Bearbeiten der Antwort.
Einstellung alle Berechtigungen 664 macht eine Menge von Annahmen darüber, welche Art von Berechtigungen, die das Projekt braucht. Ich denke, mit diesem Teil des Befehls verursacht Probleme für einige Menschen.
InformationsquelleAutor GlassGhost
InformationsquelleAutor vivekporwal04
Egal in welchem Zustand deine repo ist, können Sie jederzeit zurücksetzen, um alle vorherigen commit:
Dies verwirft alle änderungen, die vorgenommen wurden, nachdem das commit.
InformationsquelleAutor msangel
Anderen Weg, um loszuwerden von neuen Dateien, die spezifischer ist als git clean-df (es wird Ihnen erlauben, um loszuwerden, einige Dateien, die nicht unbedingt alle), ist das hinzufügen von neuen Dateien zum index zuerst, dann verstauen, dann legen Sie die stash.
Diese Technik ist nützlich, wenn aus irgendeinem Grund können Sie nicht einfach so löschen Sie alle nicht verfolgte Dateien von einigen gewöhnlichen Mechanismus (wie rm).
InformationsquelleAutor tjb
Meiner Meinung nach,
sollte den trick tun. Als pro Git-Dokumentation auf der git-clean
Beschreibung
Optionen
InformationsquelleAutor Lahiru
Was folgt, ist wirklich nur eine Lösung, wenn Sie mit einer Gabel ein repository, in dem Sie regelmäßig synchronisieren (z.B. pull-request) mit einem anderen repo. Kurze Antwort: löschen, Gabel und refork, aber Lesen Sie die Warnungen auf github.
Ich hatte ein ähnliches problem, vielleicht nicht identisch, und ich bin traurig zu sagen, meine Lösung ist nicht ideal, aber es ist letztlich effektiver.
Ich würde oft haben git status-Meldungen wie diese (mit mindestens 2/4-Dateien):
Einem scharfen Auge werden feststellen, dass diese Dateien haben dopplegangers, die einen einzelnen Buchstaben in den Fall ab. Irgendwie, und ich habe keine Ahnung, was führte mich auf diesem Weg zu starten (da war ich nicht die Arbeit mit diesen Dateien selbst aus dem upstream-repo), ich hatte, eingeschaltet, diese Dateien. Probieren Sie die vielen Lösungen, die auf dieser Seite (und anderen Seiten) scheint nicht zu helfen.
Ich war in der Lage, das problem zu beheben, durch das löschen meiner Gabel-repository und alle lokalen repositories, und reforking. Das allein war nicht genug; upstream benennen Sie die Dateien in Frage, um neue Dateinamen. Solange Sie noch keine ungebunden arbeiten, keine wikis, und keine Probleme, Abweichungen von der upstream-repository, Sie sollte in Ordnung sein. Upstream-möglicherweise nicht sehr glücklich mit Ihnen, um das Mindeste zu sagen. Wie für mein problem, es ist zweifellos ein Benutzer-Fehler, ich bin nicht so versiert im Umgang mit git, aber die Tatsache, dass es ist weit von leicht zu beheben, weist auf ein Problem mit git auch.
InformationsquelleAutor bbarker
Wenn Sie möchten, übertragen Sie einen Vorrat an jemand anderen:
[edit] so kommentiert, es ist möglich, Namen Verstecke. Gut, wenn Sie wollen teilen Sie Ihre stash 😉
git stash save "Feature X work in progress"
.InformationsquelleAutor twicejr
Könnte man erstellen Sie Ihre eigenen alias, die beschreibt, wie es zu tun in einer beschreibenden Art und Weise.
Ich die nächsten alias um die änderungen zu verwerfen.
Änderungen verwerfen, die in einer (Liste) Datei(en) in der Baum -
Dann können Sie es als Nächstes um alle änderungen zu verwerfen:
Oder einfach nur eine Datei:
Sonst, wenn Sie wollen, um alle änderungen zu verwerfen und auch die nicht verfolgte Dateien, ich benutze eine Mischung von Kasse und sauber:
Reinigen und änderungen verwerfen und nicht verfolgte Dateien im working tree
So dass die Verwendung ist einfach als Nächstes:
Ist jetzt verfügbar, in den nächsten Github repo, die enthält eine Menge von aliases:
InformationsquelleAutor Pau
Wenn alle das bereitgestellte Dateien wurden tatsächlich begangen, dann ist der Zweig kann einfach zurückgesetzt werden, z.B. von der GUI mit etwa drei Mausklicks: Zweig, Reset, ja!
So, was ich oft Tue, in der Praxis zurückzukehren, die unerwünschte lokale änderungen ist zu verpflichten, alle die guten Sachen, und dann wieder in die Filiale.
Wenn das gute Zeug ist verpflichtet, bei einem commit, dann können Sie über "änderung Letzte commit", um es wieder zu inszeniert oder unstaged wenn Sie möchten, letztlich engagieren sich die es ein wenig anders.
Könnte dies nicht die technische Lösung, die Sie suchen, um Ihr problem, aber ich finde es eine sehr praktische Lösung. Es ermöglicht Ihnen, zu verwerfen unstaged changes selektiv, zurücksetzen der änderungen, die Sie nicht mögen, und halten diejenigen, die Sie tun.
So, in Zusammenfassung, ich hab einfach Begehen, branch reset, und änderung Letzte commit.
InformationsquelleAutor user3070485
Wenn Sie im Falle der submodule und keine anderen Lösungen zu arbeiten versuchen:
Überprüfen, was ist das problem (vielleicht ein "dirty" - Fall) Verwendung:
git diff
Entfernen stash
git submodule update
InformationsquelleAutor onalbi
Hatte ich eine seltsame situation, wo eine Datei immer unstaged, mir hilft diese zu beheben.
InformationsquelleAutor SDV
Wenn es fast unmöglich ist, auszuschließen änderungen der Dateien, haben Sie sich überlegt, Sie zu ignorieren? Wenn diese Aussage richtig ist, und Sie würde nicht berühren Sie diese Dateien während der Entwicklung dieser Befehl kann nützlich sein:
git update-index --assume-unchanged file_to_ignore
InformationsquelleAutor Jesús Castro