Ich habe an einem Git-Zweig gearbeitet und war bereit, meine Änderungen festzuschreiben. Daher habe ich ein Festschreiben mit einer nützlichen Festschreibungsnachricht durchgeführt. Ich habe dann geistesabwesend kleinere Änderungen am Code vorgenommen, die es nicht wert sind, beibehalten zu werden. Ich möchte jetzt die Zweige wechseln, aber git gibt mir,
Fehler: Sie haben lokale Änderungen an "X"; Zweige können nicht gewechselt werden.
Kann ich Filialen 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 sie festzuschreiben, und nur die Zweige wechseln.
git
branch
git-checkout
Daniel Farrell
quelle
quelle
error: You have local changes to '<filename>'; cannot switch branches.
und der Zweig ändert sich nicht. Sie könnengit checkout -m <branch-name>
Konflikte zusammenführen und in den Zweig auschecken und Konflikte selbst lösen odergit checkout -f <branch-name>
Änderungen ignorieren.Antworten:
Sie benötigen einen sauberen Status, um Zweige zu wechseln. Das Auschecken von Zweigen ist nur zulässig, wenn die "schmutzigen Dateien" nicht betroffen sind (wie Charles Bailey in den Kommentaren bemerkt).
Andernfalls sollten Sie entweder:
reset --hard HEAD
(wenn es Ihnen nichts ausmacht, diese kleinen Änderungen zu verlieren) odercheckout -f
(Fahren Sie beim Wechseln der Zweige fort, auch wenn sich der Index oder der Arbeitsbaum von HEAD unterscheidet. Dies wird verwendet, um lokale Änderungen wegzuwerfen.)Oder in jüngerer Zeit:
git switch
:git switch -f <branch-name>
(
-f
steht für--force
, was ein Alias für ist--discard-changes
)Dies unterscheidet sich von dem
git switch -m <branch-name>
, was eine Drei-Wege-Zusammenführung zwischen dem aktuellen Zweig, Ihrem Arbeitsbauminhalt und dem neuen Zweig auslöst: Auf diese Weise verlieren Sie Ihre laufende Arbeit nicht.quelle
Wenn Sie die Änderungen verwerfen möchten,
Wenn Sie die Änderungen behalten möchten,
quelle
git stash save
(wenn Sie in einem Zweig arbeiten), danngit checkout branchX
tun Sie etwasgit add/commit -m
usw.git checkout branchY
undgit stash pop
holen Sie sich dasgit stash save
jetzt zugunsten vongit stash push
Nun, es sollte sein
quelle
git stash
wird standardmäßiggit stash save
Folgen,
quelle
Beachten Sie, dass Sie Folgendes tun müssen, wenn Sie Remote-Zweige zusammengeführt haben oder lokale Commits haben und zum Remote-HEAD zurückkehren möchten:
HEAD
allein bezieht sich nur auf das lokale Festschreiben / Zusammenführen - mehrmals habe ich vergessen, dass beim Zurücksetzen und am Ende "Ihr Repository hat X Festschreibungen voraus ...", als ich beabsichtigte, ALLE Änderungen / Festschreibungen zu nuklearisieren und zum Remote-Zweig zurückzukehren .quelle
Wenn Sie Änderungen an Dateien vorgenommen haben, die Git auch beim Wechseln von Zweigen ändern muss, können Sie dies nicht. Verwenden Sie zum Verwerfen von Arbeitsänderungen:
Dann können Sie die Zweige wechseln.
quelle
Keine dieser Antworten hat mir geholfen, da ich auch nach dem Zurücksetzen und Verstecken noch nicht verfolgte Dateien hatte. Ich musste es machen:
quelle
Wechsel zu einem neuen Zweig, der Änderungen verliert:
Wechseln zu einer bestehenden Niederlassung, bei der Änderungen verloren gehen:
quelle
Einfache Antwort:
ist das Auschecken eines Zweigs zu erzwingen
Wenn Sie das Auschecken eines Zweigs erzwingen, wird git angewiesen, alle Änderungen, die Sie am aktuellen Zweig vorgenommen haben, zu löschen und den gewünschten auszuchecken.
oder für den Fall, dass Sie ein Commit auschecken
Die Antwort darauf lautet Nein , das ist buchstäblich die Philosophie von Git, dass Sie alle Änderungen verfolgen und dass jeder Knoten (dh Commit) mit den neuesten Änderungen auf dem neuesten Stand sein muss, es sei denn, Sie haben machte natürlich ein neues Commit.
Sie haben beschlossen, Änderungen beizubehalten?
Dann verstauen Sie sie mit
Verwenden Sie dann, um Ihre Änderungen in der gewünschten Verzweigung zu entfernen
Dadurch werden Ihre Änderungen übernommen, aber auch in der Stash-Warteschlange gespeichert. Wenn Sie sie nicht im Stack-Stack behalten möchten, platzieren Sie sie mit
Das ist das Äquivalent von
apply
und danndrop
quelle
Schließen Sie das Terminal, löschen Sie den Ordner, in dem sich Ihr Projekt befindet, und klonen Sie dann erneut Ihr Projekt und voilá.
quelle
reset --hard
!Wenn Sie die Änderungen beibehalten und den Zweig in einem einzeiligen Befehl ändern möchten
quelle
Verschieben Sie nicht festgeschriebene Änderungen in einen neuen Zweig
Ich habe dafür einen
.gitconfig
Alias erstellt :new-branch-name
Verwenden Sie zum Wechseln zu :Nicht festgeschriebene Datei- und Indexänderungen werden beibehalten.
quelle
git checkout -f your_branch_name
Wenn Sie Probleme beim Zurücksetzen von Änderungen haben:
Wenn Sie nicht verfolgte Verzeichnisse und Dateien entfernen möchten:
quelle
Um zu einem anderen Zweig zu wechseln, ohne die Änderungen zu übernehmen, wenn Git Stash nicht funktioniert. Sie können den folgenden Befehl verwenden:
Git Checkout -f Filialname
quelle