Ich habe also einige Arbeiten im Repository durchgeführt und als ich mich verpflichten möchte, stelle ich fest, dass ich derzeit in keinem Zweig bin.
Dies passiert häufig bei der Arbeit mit Submodulen und ich kann es lösen, aber der Prozess ist langwierig und ich habe gedacht, dass es einen einfacheren Weg geben muss, dies zu tun.
Gibt es eine einfache Möglichkeit, zu einem Zweig zurückzukehren, während die Änderungen beibehalten werden?
git
branch
git-checkout
Erik B.
quelle
quelle
git show
odergit rev-parse HEAD
), wechseln Sie zum Zweig und anschließendgit cherry-pick
den Commit-Hash.git merge _hash_
git merge <hash-of-the-commit-you-just-made>
.das hat mir geholfen
quelle
Das Ergebnis ist ungefähr so:
Also machen wir's:
quelle
git gc
zwischen dem Ausführen dieser beiden Befehle laufen würden, würden Sie diese Commits verlieren, aber wenn Sie nichtgit gc
automatisch ausgeführt werden, sollte dies ein ziemlich risikofreier Ansatz sein. Ich würde immer noch mit Babays Antwort gehen, aber wenn Sie sich ersparen möchten, zwei zusätzliche Befehle zu schreiben, ist dies wahrscheinlich der richtige Weg.Hier einen anderen Weg verlassen
quelle
Alternativ können Sie Ihre Submodule so einrichten, dass Sie einen Zweig auschecken, anstatt sich in ihrem Standardzustand mit getrenntem Kopf zu befinden.
Bearbeitet, um hinzuzufügen:
Eine Möglichkeit besteht darin, einen bestimmten Zweig des Submoduls auszuchecken, wenn Sie ihn mit dem Flag -b hinzufügen:
Eine andere Möglichkeit besteht darin, einfach in das Submodulverzeichnis zu gehen und es auszuchecken
quelle
gitmodules
vielleicht?Eine Möglichkeit, in dieser Situation zu enden, besteht darin, eine Rebase von einem Remote-Zweig durchzuführen. In diesem Fall wird auf die neuen Commits verwiesen,
HEAD
abermaster
nicht auf sie. Sie zeigen auf den Ort, an dem sie sich befanden, bevor Sie den anderen Zweig neu gegründet haben.Sie können dieses Commit zu Ihrem neuen machen,
master
indem Sie Folgendes tun:Dies wird zwangsweise aktualisiert
master
, um aufHEAD
(ohne Sie anzulegen) zu verweisen, und wechseltmaster
dann zumaster
.quelle
Ich bin kürzlich wieder auf dieses Problem gestoßen. Es ist eine Weile her, seit ich das letzte Mal mit Submodulen gearbeitet habe und nachdem ich mehr über Git erfahren habe, wurde mir klar, dass es ausreicht, nur den Zweig zu überprüfen, für den Sie sich festlegen möchten. Git behält den Arbeitsbaum auch dann bei, wenn Sie ihn nicht verstauen.
Wenn Sie an einem neuen Zweig arbeiten möchten, sollte dies für Sie funktionieren:
Das Auschecken schlägt fehl, wenn Sie Konflikte im Arbeitsbaum haben, aber das sollte ziemlich ungewöhnlich sein. Wenn dies passiert, können Sie es einfach verstauen, einfügen und den Konflikt lösen.
Im Vergleich zur akzeptierten Antwort erspart Ihnen diese Antwort die Ausführung von zwei Befehlen, deren Ausführung ohnehin nicht so lange dauert. Daher werde ich diese Antwort nicht akzeptieren, es sei denn, sie erhält auf wundersame Weise mehr positive Stimmen (oder zumindest mehr Stimmen) als die derzeit akzeptierte Antwort.
quelle
Die folgende Methode kann funktionieren:
Dadurch werden Ihre aktuellen HEAD-Änderungen über dem Master wiederhergestellt. Dann können Sie den Zweig wechseln.
Alternativ können Sie zuerst die Filiale auschecken:
Dann sollte Git SHA1 Ihrer getrennten Commits anzeigen, dann können Sie sie auswählen, z
Oder Sie können auch die neueste zusammenführen:
Führen Sie Folgendes aus, um alle Ihre Commits aus verschiedenen Branchen anzuzeigen (um sicherzustellen, dass Sie sie haben)
git reflog
.quelle
Ich weiß, dass ich Babay 2012 gesagt habe, dass ich es für unwahrscheinlich halte, dass jemand nicht merkt, dass er nicht in einem Zweig ist und sich verpflichtet. Das ist mir gerade passiert, also muss ich wohl zugeben, dass ich falsch lag, aber wenn man bedenkt, dass es bis 2016 gedauert hat, bis mir das passiert ist, könnte man argumentieren, dass es tatsächlich unwahrscheinlich ist.
Wie auch immer, die Schaffung einer neuen Niederlassung ist meiner Meinung nach übertrieben. Alles was du tun musst, ist:
Wenn Sie das Commit-sha vor dem Auschecken des anderen Zweigs nicht kopiert haben, können Sie es leicht finden, indem Sie Folgendes ausführen:
quelle