Wechsle den Branch und ignoriere alle Änderungen ohne Commit
Lesezeit: 6 Minuten
Daniel Farell
Ich habe an einem Git-Zweig gearbeitet und war bereit, meine Änderungen zu übernehmen, also habe ich einen Commit mit einer nützlichen Commit-Nachricht durchgeführt. Ich habe dann geistesabwesend kleinere Änderungen am Code vorgenommen, die es nicht wert sind, aufbewahrt zu werden. Ich möchte jetzt Branches wechseln, aber Git gibt mir,
Fehler: Sie haben lokale Änderungen an “X”; Zweige nicht wechseln können.
Kann ich Branches wechseln, ohne mich zu verpflichten? Wenn ja, wie kann ich das einrichten? Wenn nicht, wie komme ich aus diesem Problem heraus? Ich möchte die geringfügigen Änderungen ignorieren, ohne mich zu verpflichten, und nur die Zweige ändern.
Ich glaube, das passiert nur, wenn die Änderungen zum Festschreiben bereitgestellt, aber nicht festgeschrieben werden? git checkout funktioniert gut zum Wechseln von Branches, wenn Sie die Dateien noch nicht mit git add oder ähnlichem bereitgestellt haben.
– Jeremy Wand
21. August 2009 um 3:16 Uhr
Hallo Jeremy, was meinst du mit “inszeniert”? Den Benutzer zu zwingen, eine Datei vor Änderungszweigen festzuschreiben, scheint kein großartiger Workflow zu sein. Zum Beispiel, wenn ich im Master-Repository bin und schnell etwas in einem Branch überprüfen möchte. Ich muss den Code zuerst an den Master übergeben, auch wenn der Code halb geschrieben ist! Wollen Sie damit sagen, dass es in dieser Situation tatsächlich möglich sein sollte, eine Filiale auszuchecken?
– Daniel Farell
21. August 2009 um 9:25 Uhr
@boyfarrell Sie können ‘Git Stash’ verwenden, um die Änderungen vorübergehend zu speichern, ohne sich zu verpflichten.
– Howiecamp
29. Oktober 2016 um 23:01 Uhr
Vernetzen der eng verwandten Wie erzwinge ich „git pull“, lokale Dateien zu überschreiben?
– user56reinstatemonica8
9. Januar 2018 um 17:51 Uhr
Wenn Sie zu einem Zweig wechseln, ohne Änderungen im alten Zweig festzuschreiben, versucht Git, die Änderungen mit den Dateien im neuen Zweig zusammenzuführen. Wenn das Zusammenführen ohne Konflikte erfolgt, ist das Wechseln der Zweige erfolgreich und Sie können die Änderungen im neuen Zweig sehen. Aber wenn ein Konflikt auftritt, erhalten Sie error: You have local changes to '<filename>'; cannot switch branches. und Branche wird sich nicht ändern. du kannst tun git checkout -m <branch-name> um Konflikte zusammenzuführen und zum Zweig auszuchecken und Konflikte selbst zu lösen, oder git checkout -f <branch-name> Änderungen zu ignorieren.
– Samad Montazeri
8. Juni 2019 um 9:10 Uhr
VonC
Sie benötigen einen sauberen Zustand, um Zweige zu ändern. Der Zweig-Checkout wird nur erlaubt, wenn er die „schmutzigen Dateien“ nicht betrifft (wie Charles Bailey in den Kommentaren anmerkt).
reset --hard HEAD (wenn es Ihnen nichts ausmacht, diese geringfügigen Änderungen zu verlieren) oder
checkout -f (Wenn Sie Branches wechseln, fahren Sie fort, auch wenn der Index oder der Arbeitsbaum von HEAD abweicht. Dies wird verwendet, um lokale Änderungen zu verwerfen.)
(-f Kurzform für --forcewas ein Alias für ist --discard-changes)
Fahren Sie fort, auch wenn der Index oder der Arbeitsbaum von HEAD abweicht.
Sowohl der Index als auch der Arbeitsbaum werden wiederhergestellt, um mit dem Wechselziel übereinzustimmen.
Dies unterscheidet sich von git switch -m <branch-name>wodurch eine dreifache Zusammenführung zwischen dem aktuellen Zweig, dem Inhalt Ihres Arbeitsbaums und dem neuen Zweig ausgelöst wird: Auf diese Weise verlieren Sie Ihre laufende Arbeit nicht.
“Sie brauchen einen sauberen Zustand, um Branches zu wechseln.” ist nur wahr, wenn die Zweigänderung die ‘dirty files’ betrifft.
– CB Bailey
20. August 2009 um 11:46 Uhr
Für die Stash-Methode habe ich “git stash save”, “git checkout otherbranch” und schließlich “git stash pop” eingegeben.
– Venkat D.
13. Oktober 2011 um 1:05 Uhr
Derzeit sehe ich diese Fehlermeldung nicht, und die Änderungen, die ich an einem Zweig vorgenommen habe, werden auf dem anderen angezeigt, wenn ich “git status” mache. hat sich etwas geändert?
– Senthil A Kumar
28. November 2011 um 6:50 Uhr
Danke. die Kasse -f war das, was ich brauchte. Ich habe git reset –hard git clean -f git checkout mybranch -f gemacht
– kein Logo
8. Juli 2015 um 1:12 Uhr
Hier ist die eine großartige Sache, die Git völlig falsch gemacht hat, indem es gegen die grundlegende Definition eines Zweigs verstoßen hat. Im Gegensatz zu Git bedeutet Branch zwei völlig unterschiedliche Workspaces, die aus einem Repository geforkt wurden.
– nehem
14. Februar 2017 um 22:23 Uhr
Wenn Sie die Änderungen verwerfen möchten,
git checkout -- <file>
git checkout branch
Wenn Sie die Änderungen beibehalten möchten,
git stash save
git checkout branch
git stash pop
In der Tat, was Romerun sagt (um vollständig zu sein): git stash save (wenn im Arbeitszweig Y) dann git checkout branchX etwas tun git add/commit -m usw. git checkout branchY Und git stash pop um den Vorrat zurückzubekommen
– Hochmastdon
9. November 2012 um 9:36 Uhr
Vielleicht so. Ich habe jedoch eine Situation, in der ich tun möchte, was die Antwort sagt, wenn ich es richtig verstehe: Änderungen verstecken, von Y nach X wechseln, dann Änderungen einfügen und sie auf X übertragen.
– Ben Klein
6. Oktober 2015 um 17:02 Uhr
beachten Sie, dass git stash save ist jetzt zugunsten von veraltet git stash push
– Amr Säbel
21. Oktober 2018 um 15:45 Uhr
Dieser Alias vereinfacht den Fall, dass Änderungen beibehalten werden, wenn Branches gewechselt werden.
– Tom Hale
8. Juni 2019 um 9:49 Uhr
naja, so sollte es sein
git stash save
git checkout branch
// do something
git checkout oldbranch
git stash pop
Ja, Stash ist global, nicht branchenspezifisch, wenn ich Pop stash, nachdem ich den Branch gewechselt habe, bekomme ich den gleichen Stash wie in den anderen Branches.
– Aditya Mittal
19. Januar 2016 um 19:07 Uhr
Sollte man sich merken git stash wird standardmäßig git stash save
– Charlie-Greenman
8. August 2016 um 14:19 Uhr
Danke, es ist sehr hilfreich für mich
– GKS
24. Mai 2017 um 12:45 Uhr
Folgen,
$: git checkout -f
$: git checkout next_branch
Klippe
Beachten Sie, dass Sie Folgendes tun müssen, wenn Sie entfernte Zweige zusammengeführt haben oder lokale Commits haben und zum entfernten HEAD zurückkehren möchten:
git reset --hard origin/HEAD
HEAD allein bezieht sich nur auf das lokale Commit/Merge – mehrmals habe ich das beim Zurücksetzen vergessen und am Ende mit “Ihr Repository sind X Commits voraus …” beendet, obwohl ich beabsichtigt hatte, ALLE Änderungen/Commits zu löschen und zum Remote-Zweig zurückzukehren .
vishnu viswanath
Keine dieser Antworten hat mir geholfen, weil ich auch nach dem Zurücksetzen und Verstauen noch nicht verfolgte Dateien hatte. Ich musste es machen:
git reset --hard HEAD
git clean -d -f
Pedro Trujillo
git checkout -f your_branch_name
git checkout -f your_branch_name
Wenn Sie Probleme haben, Änderungen rückgängig zu machen:
git checkout .
Wenn Sie nicht verfolgte Verzeichnisse und Dateien entfernen möchten:
git clean -fd
14462500cookie-checkWechsle den Branch und ignoriere alle Änderungen ohne Commityes
Ich glaube, das passiert nur, wenn die Änderungen zum Festschreiben bereitgestellt, aber nicht festgeschrieben werden? git checkout funktioniert gut zum Wechseln von Branches, wenn Sie die Dateien noch nicht mit git add oder ähnlichem bereitgestellt haben.
– Jeremy Wand
21. August 2009 um 3:16 Uhr
Hallo Jeremy, was meinst du mit “inszeniert”? Den Benutzer zu zwingen, eine Datei vor Änderungszweigen festzuschreiben, scheint kein großartiger Workflow zu sein. Zum Beispiel, wenn ich im Master-Repository bin und schnell etwas in einem Branch überprüfen möchte. Ich muss den Code zuerst an den Master übergeben, auch wenn der Code halb geschrieben ist! Wollen Sie damit sagen, dass es in dieser Situation tatsächlich möglich sein sollte, eine Filiale auszuchecken?
– Daniel Farell
21. August 2009 um 9:25 Uhr
@boyfarrell Sie können ‘Git Stash’ verwenden, um die Änderungen vorübergehend zu speichern, ohne sich zu verpflichten.
– Howiecamp
29. Oktober 2016 um 23:01 Uhr
Vernetzen der eng verwandten Wie erzwinge ich „git pull“, lokale Dateien zu überschreiben?
– user56reinstatemonica8
9. Januar 2018 um 17:51 Uhr
Wenn Sie zu einem Zweig wechseln, ohne Änderungen im alten Zweig festzuschreiben, versucht Git, die Änderungen mit den Dateien im neuen Zweig zusammenzuführen. Wenn das Zusammenführen ohne Konflikte erfolgt, ist das Wechseln der Zweige erfolgreich und Sie können die Änderungen im neuen Zweig sehen. Aber wenn ein Konflikt auftritt, erhalten Sie
error: You have local changes to '<filename>'; cannot switch branches.
und Branche wird sich nicht ändern. du kannst tungit checkout -m <branch-name>
um Konflikte zusammenzuführen und zum Zweig auszuchecken und Konflikte selbst zu lösen, odergit checkout -f <branch-name>
Änderungen zu ignorieren.– Samad Montazeri
8. Juni 2019 um 9:10 Uhr