503 Stimmen

Überprüfen Sie einen anderen Zweig, wenn es nicht überprüfte Änderungen im aktuellen Zweig gibt

Die meiste Zeit, wenn ich versuche, zu einem anderen vorhandenen Branch zu wechseln, erlaubt mir Git es nicht, wenn ich einige nicht committete Änderungen auf dem aktuellen Branch habe. Also muss ich diese Änderungen zuerst committen oder weglegen.

Gelegentlich erlaubt mir Git jedoch, zu einem anderen Branch zu wechseln, ohne diese Änderungen zu committen oder wegzulegen, und es übernimmt diese Änderungen in den Branch, den ich wechsle.

Was ist hier die Regel? Spielt es eine Rolle, ob die Änderungen inszeniert oder nicht inszeniert sind? Das Übertragen der Änderungen in einen anderen Branch macht für mich keinen Sinn, warum erlaubt es git manchmal? Das heißt, ist es in einigen Situationen hilfreich?

78voto

Rob Punkte 11053

Sie haben zwei Möglichkeiten: Verbergen Sie Ihre Änderungen:

git stash

und später, um sie zurückzuholen:

git stash apply

oder legen Sie Ihre Änderungen auf einen Branch, damit Sie den Remote-Branch erhalten und dann Ihre Änderungen darauf mergen können. Das ist eine der großartigen Dinge an git: Sie können einen Branch erstellen, darauf committen, dann andere Änderungen auf den Branch holen, auf dem Sie sich befanden.

Sie sagen, es ergibt keinen Sinn, aber Sie tun es nur, damit Sie sie nach Belieben mergen können, nachdem Sie den Pull durchgeführt haben. Offensichtlich ist Ihre andere Möglichkeit, auf Ihrem Branch zu committen und dann den Pull durchzuführen. Die Annahme ist, dass Sie das entweder nicht tun möchten (in welchem Fall ich verwundert bin, dass Sie keinen Branch wollen) oder dass Sie Angst vor Konflikten haben.

24voto

Gordolio Punkte 1835

Wenn der neue Zweig Änderungen enthält, die sich von dem aktuellen Zweig für diese spezielle geänderte Datei unterscheiden, wird es Ihnen nicht ermöglichen, Zweige zu wechseln, bis die Änderung übernommen oder gestasht ist. Wenn die geänderte Datei auf beiden Zweigen gleich ist (das heißt, die übernommene Version dieser Datei), können Sie frei wechseln.

Beispiel:

$ echo 'hallo Welt' > file.txt
$ git add file.txt
$ git commit -m "file.txt hinzufügen"

$ git checkout -b experiment
$ echo 'auf Wiedersehen Welt' >> file.txt
$ git add file.txt
$ git commit -m "Text hinzugefügt"
     # experiment enthält nun Änderungen, die master nicht hat
     # jede zukünftige Änderung an dieser Datei wird Sie daran hindern, Zweige zu wechseln
     # bis die Änderungen gestasht oder übernommen sind

$ echo "und wir sind zurück" >> file.txt  # zusätzliche Änderungen machen
$ git checkout master
Fehler: Ihre lokalen Änderungen an den folgenden Dateien würden beim Checkout überschrieben:
    file.txt
Bitte übernehmen Sie Ihre Änderungen oder stashen Sie diese, bevor Sie die Zweige wechseln können.
Abbruch

Dies gilt sowohl für unverfolgte Dateien als auch für verfolgte Dateien. Hier ist ein Beispiel für eine unverfolgte Datei.

Beispiel:

$ git checkout -b experimentell  # erstellt neuer Zweig 'experimentell'
$ echo 'hallo Welt' > file.txt
$ git add file.txt
$ git commit -m "file.txt hinzugefügt"

$ git checkout master # master hat file.txt nicht
$ echo 'auf Wiedersehen Welt' > file.txt
$ git checkout experimentell
Fehler: Die folgenden unverfolgten Arbeitsdateien würden beim Checkout überschrieben:
    file.txt
Bitte verschieben oder entfernen Sie sie, bevor Sie die Zweige wechseln können.
Abbruch

Ein gutes Beispiel dafür, warum Sie zwischen Zweigen wechseln möchten, während Sie Änderungen vornehmen, wäre, wenn Sie Experimente auf Master durchführen, diese aber noch nicht auf Master übernehmen möchten...

$ echo 'experimentelle Änderung' >> file.txt # Änderung an vorhandener verfolgter Datei
   # Ich möchte diese speichern, aber nicht auf Master

$ git checkout -b experiment
M       file.txt
Zweig 'experiment' gewechselt
$ git add file.txt
$ git commit -m "mögliche Änderung für file.txt"

8voto

J.D.1731 Punkte 339

Die richtige Antwort ist

git checkout -m origin/master

Es fusioniert Änderungen aus dem Ursprungs-Master-Zweig mit Ihren lokalen, sogar noch nicht bestätigten Änderungen.

4voto

Vaidesh Shankar Punkte 91
  1. Der Branch-Wechsel erfolgt nur, wenn Sie eine Datei ändern, die keinen Unterschied zwischen den beiden Branches aufweist. In diesem Fall behandelt git diese Änderung als gemeinsam für beide Dateien.
  2. Dies wird verhindert, wenn Sie eine Datei ändern, deren Unterschied zwischen den beiden Branches besteht. In diesem Fall erhalten Sie das ABORT-Signal.

Nach einer Stunde Untersuchung mit lokalen Tests kam ich zu diesem Schluss.

1voto

James Yang Punkte 110

Ich habe kürzlich die gleiche Frage gehabt. Was ich verstehe ist, dass, wenn der Zweig, den du überprüfst, eine Datei hat, die du geändert hast und die auch von dem Zweig geändert und committet wurde. Dann wird Git dich davon abhalten, den Zweig zu wechseln, um deine Änderung sicher aufzubewahren, bevor du committest oder stasht.

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