421 Stimmen

git: Zweig wechseln und alle Änderungen ignorieren, ohne zu committen

Ich habe an einem Git-Zweig gearbeitet und war bereit, meine Änderungen zu übertragen, also habe ich einen Commit mit einer sinnvollen Commit-Nachricht gemacht. Dann habe ich geistesabwesend kleinere Änderungen am Code vorgenommen, die es nicht wert sind, beibehalten zu werden. Jetzt möchte ich den Zweig wechseln, aber Git lässt mich im Stich,

Fehler: Sie haben lokale Änderungen an "X"; Sie können nicht zwischen den Zweigen wechseln.

Kann ich Zweige ändern, ohne sie zu bestätigen? Wenn ja, wie kann ich das einrichten? Wenn nicht, wie komme ich aus diesem Problem heraus? Ich möchte die kleineren Änderungen ohne Commit ignorieren und nur die Zweige ändern.

526voto

VonC Punkte 1117238

Sie brauchen einen sauberen Zustand, um Zweige zu wechseln. Das Auschecken eines Zweiges wird nur dann erlaubt, wenn es sich nicht auf die "schmutzigen Dateien" auswirkt (als Charles Bailey Bemerkungen in den Kommentaren).

Andernfalls sollten Sie entweder:

  • Versteck Ihre aktuelle Änderung oder
  • reset --hard HEAD (wenn es Ihnen nichts ausmacht, diese kleinen Änderungen zu verlieren) oder
  • checkout -f (Beim Wechseln der Verzweigungen ist auch dann vorzugehen, wenn der Index oder der Arbeitsbaum von HEAD abweicht. Dies wird verwendet, um lokale Änderungen zu verwerfen. )

Oder, in jüngerer Zeit:

Fahren Sie fort, auch wenn der Index oder der Arbeitsbaum von HEAD abweicht.
Sowohl der Index als auch der Arbeitsbaum werden so wiederhergestellt, dass sie mit dem Wechselziel übereinstimmen.

Dies unterscheidet sich von git switch -m <branch-name> die eine Drei-Wege-Zusammenführung zwischen dem aktuellen Zweig, dem Inhalt Ihres Arbeitsbaums und dem neuen Zweig auslöst, ist erledigt: Sie verlieren auf diese Weise nicht Ihre laufende Arbeit.

158voto

Jamie Macey Punkte 2824

Wenn Sie die Änderungen verwerfen wollen,

git checkout -- <file>
git checkout branch

Wenn Sie die Änderungen beibehalten wollen,

git stash save
git checkout branch
git stash pop

82voto

romerun Punkte 2081

Nun, es sollte sein

git stash save
git checkout branch
// do something
git checkout oldbranch
git stash pop

26voto

simplyharsh Punkte 33444

Folgen,

$: git checkout -f

$: git checkout next_branch

20voto

ccliffe Punkte 199

Beachten Sie, dass Sie, wenn Sie entfernte Zweige zusammengeführt haben oder lokale Commits haben und zum entfernten HEAD zurückkehren wollen, dies tun müssen:

git reset --hard origin/HEAD

HEAD allein wird sich nur auf den lokalen Commit/Merge beziehen -- mehrere Male habe ich das beim Zurücksetzen vergessen und endete mit "Ihr Repository ist X Commits voraus ", obwohl ich eigentlich vorhatte, ALLE Änderungen/Commits zu vernichten und zum entfernten Zweig zurückzukehren.

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