Wie verwerfe ich Änderungen in meiner Arbeitskopie, die nicht im Index enthalten sind?
Antworten
Zu viele Anzeigen?Eine andere Möglichkeit, neue Dateien loszuwerden, die spezifischer ist als git clean -df (es erlaubt Ihnen, einige Dateien loszuwerden, aber nicht unbedingt alle), besteht darin, die neuen Dateien zuerst in den Index aufzunehmen, dann in den Vorrat und dann den Vorrat zu löschen.
Diese Technik ist nützlich, wenn Sie aus irgendeinem Grund nicht alle nicht verfolgten Dateien mit einem normalen Mechanismus (wie rm) löschen können.
Was folgt, ist wirklich nur eine Lösung, wenn Sie mit einem Fork eines Repositorys arbeiten, das Sie regelmäßig mit einem anderen Repository synchronisieren (z.B. Pull Request). Kurze Antwort: Fork löschen und refork, aber Lesen Sie die Warnhinweise auf Github .
Ich hatte ein ähnliches Problem, vielleicht nicht identisch, und ich muss leider sagen, dass meine Lösung nicht ideal ist, aber sie ist letztendlich effektiv.
Ich hatte oft Git-Statusmeldungen wie diese (mit mindestens 2/4 Dateien):
$ git status
# Not currently on any branch.
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: doc/PROJECT/MEDIUM/ATS-constraint/constraint_s2var.dats
# modified: doc/PROJECT/MEDIUM/ATS-constraint/parsing/parsing_s2var.dats
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: doc/PROJECT/MEDIUM/ATS-constraint/constraint_s2Var.dats
# modified: doc/PROJECT/MEDIUM/ATS-constraint/parsing/parsing_s2Var.dats
Einem aufmerksamen Auge fällt auf, dass diese Dateien Doppelgänger haben, die in der Groß- und Kleinschreibung um einen einzigen Buchstaben abweichen. Irgendwie, und ich habe keine Ahnung, was mich auf diesen Weg geführt hat (da ich nicht selbst mit diesen Dateien aus dem Upstream-Repository gearbeitet habe), hatte ich diese Dateien vertauscht. Die vielen Lösungen, die auf dieser Seite (und anderen Seiten) aufgeführt sind, scheinen nicht zu helfen.
Ich konnte das Problem beheben, indem ich mein geforktes Repository und alle lokalen Repositories löschte und neu forkte. Das allein reichte aber nicht aus; Upstream musste die fraglichen Dateien in neue Dateinamen umbenennen. Solange Sie keine unbestätigten Arbeiten, keine Wikis und keine Probleme haben, die vom Upstream-Repository abweichen, sollte es Ihnen gut gehen. Upstream könnte nicht sehr glücklich mit Ihnen sein, um es vorsichtig auszudrücken. Was mein Problem angeht, so ist es zweifellos ein Benutzerfehler, da ich mich mit Git nicht so gut auskenne, aber die Tatsache, dass es alles andere als einfach zu beheben ist, deutet auch auf ein Problem mit Git hin.
Sie könnten einen eigenen Alias erstellen, der die Vorgehensweise in anschaulicher Weise beschreibt.
Ich verwende den nächsten Alias, um Änderungen zu verwerfen.
Änderungen an einer (Liste von) Datei(en) im Arbeitsbaum verwerfen
discard = checkout --
Dann können Sie es als nächstes verwenden, um alle Änderungen zu verwerfen:
discard .
Oder nur eine Datei:
discard filename
Andernfalls, wenn Sie alle Änderungen und auch die nicht getrackten Dateien verwerfen wollen, verwende ich eine Mischung aus checkout und clean:
Bereinigen und Verwerfen von Änderungen und nicht verfolgten Dateien im Arbeitsbaum
cleanout = !git clean -df && git checkout -- .
Die Nutzung ist also denkbar einfach:
cleanout
Jetzt ist in der nächsten Github Repo, die eine Menge von Aliasen enthält:
0 Stimmen
Siehe auch stackoverflow.com/questions/22620393/
16 Stimmen
git-clean
entfernt nur die nicht verfolgten Dateien aus dem Arbeitsbaum git-scm.com/docs/git-clean37 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 .26 Stimmen
'git clean -df ' Seien Sie gewarnt! Ich habe das ausprobiert und wichtige Ordner verloren, die nicht wiederhergestellt werden können... Autsch!
73 Stimmen
Unter
git status
macht einen Vorschlag, wie man das machen kann!git checkout -- .
0 Stimmen
Git gui hat eine Funktion, mit der Änderungen sicher rückgängig gemacht werden können. .gitignore wird von diesem Programm beachtet, während git-clean es überhaupt nicht verwendet.
0 Stimmen
@Readonly Ich denke, die Frage sollte lauten: "Wie verwerfe ich nicht bereitgestellte Änderungen im Arbeitsbaum?
git reset HEAD file1
das überschreibtfile1
vom letzten Commit in der Commit-Historie zum Staging-Bereich.28 Stimmen
@Paulo: ab Juli 2019,
git status
gibt die Anregung:git restore
.git restore
ist ein neuer Befehl genau für diesen Zweck. Siehe mein Update 2019 .2 Stimmen
Ich denke, dass entweder die Frage oder der Titel geändert werden sollte. Der Titel stimmt nicht mit der gestellten Frage überein, und es ist nicht klar, ob die Antworten beides abdecken.
0 Stimmen
Wahrscheinlich ist es nicht das, was Sie suchen, aber wenn Sie die GitHub Desktop App verwenden, gibt es natürlich einen Menüpunkt, um dies zu tun. Zweig -> Alle Änderungen verwerfen