Wechsle den Branch und ignoriere alle Änderungen ohne Commit

Lesezeit: 6 Minuten

Benutzeravatar von Daniel Farrell
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


Benutzeravatar von VonC
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).

Andernfalls sollten Sie entweder:

  • verstauen Ihre aktuelle Änderung bzw
  • 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.)

Oder neuerdings:

  • Mit Git 2.23 (August 2019) und dem neuer Befehl git switch:
    git switch -f <branch-name>

    (-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

ccliffes Benutzeravatar
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 .

Benutzeravatar von vishnu viswanath
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

Benutzeravatar von Pedro Trujillo
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

1446250cookie-checkWechsle den Branch und ignoriere alle Änderungen ohne Commit

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy