Ich lerne gerade Git, durch ein Tutorial gehen. Ich bin in der Filiale seo_title und ich habe nicht festgeschriebene Änderungen an der Datei mission.html. Ich habe git checkout master
die Warnung über Änderungen erhalten erwarten nicht inszeniert für begehen, fügte keine Änderungen, etc, aber anstatt es ging voran und schaltet Zweige mit der Meldung:Git erlaubt mir, Filialen zu wechseln, ohne Änderungen zu machen
M mission.html
Switched to branch 'master'
Dann, wenn ich git diff mission.html
tat es mir gezeigt, dass die Arbeitsverzeichnis enthält noch die Änderungen, die ich gemacht habe, während ich den anderen Zweig ausgecheckt hatte. Was fehlt mir? Für was es wert ist, verwende ich Git Bash unter Windows.
BEARBEITEN: die Änderungen an mission.html wurden auch nicht zum Staging-Index hinzugefügt.
BEARBEITEN 2: Ich dachte, dass die oben gewählte Antwort richtig war, aber bei weiterer Untersuchung stimmt es nicht mit dem Verhalten überein, das ich sehe. Hier ist eine vollständigere Beschreibung von dem, was ich tue:
top_directory(master) > git branch new_branch_1
top_directory(master) > git branch new_branch_2
top_directory(master) > git checkout new_branch_1
(offene Notizblock ++ und ändern resources.html, speichern)
top_directory(master) > git status
# On branch new_branch_1
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed
# (use "git checkout -- <file>..." to discard changes in wo
#
# modified: resources.html
#
no changes added to commit (use "git add" and/or "git commit
top_directory(new_branch_1) > git checkout new_branch_2
Dies ist, wo ich git erwarten, dass ich zu widersprechen und sagen, beiseite zu schaffen oder begehen seit new_branch_1 und new_branch_2 verschiedene Versionen von resources.html haben, aber es schaltet nur auf den neuen Zweig ohne eine Warnung und es bringt die unbestätigten Änderungen an:
M resources.html
Switched to branch 'new_branch_2'
top_directory(new_branch_2) > git status
# On branch new_branch_2
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: resources.html
#
no changes added to commit (use "git add" and/or "git commit -a")
gibt es ein mod Oder eine Einstellung, die dazu führt, dass sie sich so verhält, anstatt zu warnen? Oder verstehe ich das Szenario noch immer falsch?
EDIT 3: Ich verstehe es jetzt. Die bestbewertete Antwort war richtig, siehe meinen letzten Kommentar zu dieser Antwort.
Was ist die Frage? Ja, git erlaubt es, andere Zweige zu prüfen. Das ist sehr nützlich. Wenn Sie versehentlich die Datei aus dem falschen Zweig bearbeitet haben, können Sie den korrekten Zweig auschecken und dort committen. – balki
Die Sache, über die ich verwirrt bin, ist: Ich dachte, Checkout würde versuchen, das Arbeitsverzeichnis auf den neuen Zweig zu aktualisieren, und wenn es nicht festgeschriebene Änderungen finden würde (die beim Aktualisieren des Arbeitsverzeichnisses verloren gehen würden), würde es den Checkout abbrechen . Zumindest ist es das, was das Tutorial in einer früheren Lektion (und ich habe es gesehen) gezeigt hat. – burgerB
Das liegt wahrscheinlich daran, dass Sie nach dem Master-Zweig keine Commits haben. Daher zeigen alle Ihre Zweige auf dasselbe Commit-Objekt. Wenn Sie aus einem anderen Zweig auschecken, checken Sie tatsächlich aus demselben Commit mit der aktuellen Verzweigung aus. – nn0p