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 .

10voto

SDV Punkte 253

Ich hatte eine merkwürdige Situation, in der eine Datei immer unstaged ist, dies hilft mir bei der Lösung.

git rm .gitattributes
git add -A
git reset --hard

10voto

Jesús Castro Punkte 1942

Wenn es fast unmöglich ist, Änderungen an den Dateien auszuschließen, haben Sie dann erwogen, sie zu ignorieren? Wenn diese Aussage richtig ist und Sie diese Dateien während der Entwicklung nicht anfassen würden, könnte dieser Befehl nützlich sein:

git update-index --assume-unchanged file_to_ignore

10voto

tjb Punkte 10921

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.

9voto

bbarker Punkte 9463

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.

9voto

Pau Punkte 13014

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:

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