Mit git habe ich so etwas gemacht
git clone
git checkout {a rev number tree rev before} (here I started to be in a detached head state)
//hacking
git commit
//hacking
git commit
(some commit where made on origin/master)
git pull (which does complete because there was some error due to the fact that I'm no more on master)
Weil es mir gesagt hat, dass ich mich immer noch verpflichten kann, wenn ich mich in einem Zustand mit losgelöstem Kopf befinde, habe ich es getan. Aber jetzt möchte ich meinen abgetrennten Hauptzweig und meinen lokalen Hauptzweig zusammenführen und dann meine Änderungen an origin / master verschieben.
Meine Frage ist also, wie ich den Hauptzweig mit meinem tatsächlichen Zustand (losgelöster Kopf) zusammenführen kann.
git
git-checkout
Benzol
quelle
quelle
Antworten:
Erstellen Sie einen Zweig, in dem Sie sich befinden, wechseln Sie dann zum Master und führen Sie ihn zusammen:
quelle
Sie könnten so etwas tun.
Noch einfacher wäre es
Dies birgt jedoch die geringe Gefahr, dass es etwas schwieriger sein kann, die auf dem abgetrennten Kopf vorgenommenen Festschreibungen wiederherzustellen, wenn Sie einen Fehler machen.
quelle
git merge HEAD@{1}
sollten Sie wahrscheinlich sicherstellen, dass dies der Befehl ist, den Sie verwenden möchtengit reflog
Das habe ich getan:
Stellen Sie sich das
detached HEAD
als einen neuen Zweig ohne Namen vor. Sie können sich wie jeder andere Zweig auf diesen Zweig festlegen. Sobald Sie mit dem Festschreiben fertig sind, möchten Sie es auf die Fernbedienung übertragen.Das erste, was Sie tun müssen, ist, diesem
detached HEAD
einen Namen zu geben. Sie können es einfach so machen, während Sie dabei sinddetached HEAD
:Jetzt können Sie es wie jeden anderen Zweig auf die Fernbedienung schieben.
In meinem Fall wollte ich diesen Zweig auch schnell vorspulen, um ihn zusammen mit den Commits, die ich im
detached HEAD
(jetztsome-new-branch
) gemacht habe, zu meistern . Ich habe nur getangit pull # To make sure my local copy of master is up to date
git merge master // This added current state of master to my changes
Natürlich habe ich es später zusammengeführt
master
.Das ist alles.
quelle
git checkout -b new-branch
arbeitete für mich. Die anderen Vorschläge fordertengit branch new-branch
, aber das ließ mich immer noch im Kopf und der neue Zweig nahm meine Änderungen nicht auf.Sie können einfach tun
git merge <commit-number>
odergit cherry-pick <commit> <commit> ...
Wie von Ryan Stewart vorgeschlagen, können Sie auch einen Zweig aus dem aktuellen HEAD erstellen:
Oder nur ein Tag:
quelle
git rev-parse HEAD
Bei getrenntem HEAD funktionieren Commits wie gewohnt, außer dass kein benannter Zweig aktualisiert wird. Um den Hauptzweig mit Ihren festgeschriebenen Änderungen zu aktualisieren, erstellen Sie einen temporären Zweig an Ihrer Position (auf diese Weise enthält der temporäre Zweig alle festgeschriebenen Änderungen, die Sie im getrennten HEAD vorgenommen haben). Wechseln Sie dann zum Hauptzweig und führen Sie den temporären Zweig mit zusammen der Meister.
quelle
Eine einfache Lösung besteht darin, einfach einen neuen Zweig für dieses Commit zu erstellen und ihn auszuchecken :
git checkout -b <branch-name> <commit-hash>
.Auf diese Weise werden alle von Ihnen vorgenommenen Änderungen in diesem Zweig gespeichert. Wenn Sie Ihren Hauptzweig von verbleibenden Commits bereinigen müssen, müssen Sie ihn ausführen
git reset --hard master
.Damit schreiben Sie Ihre Filialen neu, damit Sie niemanden mit diesen Änderungen stören. Schauen Sie sich unbedingt diesen Artikel an, um den Zustand des abgetrennten HEAD besser zu veranschaulichen .
quelle
Vielleicht nicht die beste Lösung (schreibt die Geschichte neu), aber Sie könnten es auch tun
git reset --hard <hash of detached head commit>
.quelle