Git ist das automatische Zusammenführen von änderungen aus einem anderen branch zu meistern
Ich habe ein Problem mit Git branching. Immer wenn ich änderungen an einem Zweig, all diese änderungen spiegeln sich in master-Zweig auch wenn ich noch nicht aufgerufen expliziten merge-Befehl.
Beispielsweise
Erstellte ich ein "dashboard" - Zweig git checkout -b dashboard
dann habe ich änderungen vorgenommen, in einem meiner Datei(sagen Routen.rb) und nun bin ich umgestiegen auf master git checkout master
Wenn ich jetzt öffnen Strecken.rb, ich kann sehen, dass die änderungen von dashboard-Zweig. Warum? Ich habe einige git-Einstellungen, die nicht da sein sollte?
- Tut git verfolgen die Datei, die Sie geändert? In anderen Worten, haben Sie sich verpflichten, die Datei?
- Wenn Sie
git status
nach der Umstellung vondashboard
zumaster
, was zeigen Sie? - diese Datei(Routen.rb) begangen wurde, von Meister früher! Ich habe die Datei in dashboard-Zweig und die änderungen in die master-als auch
- NEIN! Die änderung nicht in deinem master-branch, es wird nur reflektiert in Ihren arbeiten Baum. Und nur in Ihren arbeiten, Baum, bis Sie verpflichten sich, es auf einen Zweig. Siehe meine Antwort und Lesen Sie die Diskussion auf die Git-mailing-Liste, die ich verlinkt.
- Bearbeiten Sie Ihre Frage und die Ausgabe von
git status
- Sorry, ich haben gemacht viele änderungen jetzt, Aber so wie ich das verstehe Knittl und andere haben gesagt, es richtig, Die änderungen an den Dateien vorgenommen werden Arbeitsverzeichnis, bis Sie sich auf den Zweig. Aber irgendwie fühlt sich nicht richtig an! Ich meine, ich erwartet, dass es auf diese Weise : Auch wenn ich änderungen vorgenommen, die auf einige Zweig, wenn ich den Schalter auf master diese änderungen nicht sichtbar sein soll gibt es(auf master), egal ob ich Sie begeht oder nicht. Sie waren auf verschiedenen Zweig zusammen!
- »Egal, ob ich Sie begeht oder nicht. Sie waren auf verschiedenen Zweig zusammen!« ← Nein, die Tatsache ist, dass Sie nicht auf jedem Zweig; nicht nur die änderungen, die es in der worktree und nie in einer Filiale.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie änderungen vornehmen, werden diese änderungen bestehen nur in Ihrem Arbeits-Baum bis zu dem Punkt, wenn Sie die änderungen übergeben.
Beim wechseln von Zweigen, Git tragen Veränderungen in Ihrem worktree in die neue Kasse. Dies ist oft hilfreich, wenn Sie bemerken, dass Sie arbeiteten auf der falschen Filiale.
Gibt es sogar ein die neuere Diskussion über das "unerwartete" Verhalten Git-Mailingliste über diese. Zitat Junio:
Bearbeiten
Nur für den Fall, wenn der obige link wird ungültig
Problem
Antwort
Wenn Sie die Bearbeitung der Dateien in Ihrem Arbeitsverzeichnis, die Sie nicht Bearbeiten "git" - Dateien (von einer Zweigstelle oder master) an diesem Punkt sind Sie einfach Bearbeiten Sie Ihre lokalen Dateien, oder "Arbeitsverzeichnis" wie es heißt.
Den "git" - Dateien (Sachen, die Sie begangen haben) sind alle in der .git-Verzeichnis. Das layout passt zu Ihrem Ordner und das ist, wo die Zweige werden ebenfalls gespeichert. Nebenbei: es speichert die eigentlichen Dateien(komprimiert), im Gegensatz zu version control tools wie svn zu speichern, dass das delta(Unterschied)
Also, wenn Sie eine Datei Bearbeiten, die Sie eigentlich nicht Bearbeiten entweder master oder Zweig, die Sie gerade Bearbeiten Sie die Datei. Wenn Sie das nicht tun, aber dann wechseln Sie Filialen, die Sie noch haben, die Datei und Ihre Veränderungen sichtbar werden, obwohl Sie 'umgeschaltet' auf den neuen Zweig. Dies ist, was in der Regel die Menschen überrascht zunächst.
Ist der beste Rat hier ist zu verpflichten /zu ignorieren /verwerfen Sie alle Ihre änderungen vor dem Wechsel Zweige um diese Probleme zu vermeiden. Auch tools wie gitx (Mac)m und gitg (Ubuntu) machen diese Aufgaben einfacher für diejenigen, die wie gui ' s und Sie haben auch gute Warnungen über solche Themen.
An jedem Punkt in der obigen
git status
ist sehr nützlich und kann dir sagen, was derzeit nicht verpflichtet git repo (egal ob master oder Zweige)gustavotkg gibt auch gute Ratschläge mit
git stash
für diese Probleme.git reset --hard origin/master
können, was Sie wollen für, die.Wenn Sie wechseln müssen, um master-Zweig ohne Commits des aktuellen Zweiges können Sie
git stash