
Benzol
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 sagte, dass ich mich immer noch binden kann, wenn ich mich in einem losgelösten Kopfzustand befinde, habe ich es getan. Aber jetzt möchte ich gerne meinen Detached-Head-Branch und meinen Local-Master-Branch zusammenführen und dann meine Reihe von Änderungen an Origin/Master pushen.
Meine Frage ist also, wie ich den Master-Zweig mit meinem tatsächlichen Zustand (abgetrennter Kopf) zusammenführen könnte.
Erstellen Sie dort, wo Sie sich gerade befinden, einen Zweig, wechseln Sie dann zum Master und führen Sie ihn zusammen:
git branch my-temporary-work
git checkout master
git merge my-temporary-work

CB Bailey
Sie könnten so etwas tun.
# Create temporary branch for your detached head
git branch tmp
# Go to master
git checkout master
# Merge in commits from previously detached head
git merge tmp
# Delete temporary branch
git branch -d tmp
Noch einfacher wäre
git checkout master
git merge [email protected]{1}
Dies birgt jedoch die geringe Gefahr, dass es etwas schwieriger sein kann, die auf dem abgetrennten Kopf vorgenommenen Commits wiederherzustellen, wenn Sie einen Fehler machen.

Bhushan
Folgendes habe ich getan:
Denken Sie grundsätzlich an die detached HEAD
als neuer Zweig, ohne Namen. Sie können sich in diesen Branch wie in jeden anderen Branch einschreiben. Sobald Sie mit dem Festschreiben fertig sind, möchten Sie es auf die Fernbedienung übertragen.
Das erste, was Sie tun müssen, ist dies zu geben detached HEAD
ein Name. Sie können es einfach so machen, während Sie dabei sind detached HEAD
:
git checkout -b some-new-branch
Jetzt können Sie es wie jeden anderen Zweig auf Remote verschieben.
In meinem Fall wollte ich diesen Zweig auch schnell vorspulen, um ihn zusammen mit den Commits, die ich in gemacht habe, zu meistern detached HEAD
(jetzt some-new-branch
). Alles, was ich tat, war
git checkout master
git pull # To make sure my local copy of master is up to date
git checkout some-new-branch
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.
Du kannst einfach tun git merge <commit-number>
oder git cherry-pick <commit> <commit> ...
Wie von Ryan Stewart vorgeschlagen, können Sie auch einen Zweig aus dem aktuellen HEAD erstellen:
git branch brand-name
Oder nur ein Tag:
git tag tag-name
Alternativ könnten Sie die Commit-ID in Ihrem Zweig auswählen.
<commit-id> made in detached head state
git checkout master
git cherry-pick <commit-id>
Keine temporären Zweige, kein Zusammenführen.

Razan Paul
Im Fall von getrenntem HEAD funktionieren Commits wie gewohnt, außer dass kein benannter Zweig aktualisiert wird. Um den Master-Branch mit Ihren festgeschriebenen Änderungen zu aktualisieren, erstellen Sie dort, wo Sie sich befinden, einen temporären Branch (auf diese Weise enthält der temporäre Branch alle festgeschriebenen Änderungen, die Sie im abgetrennten HEAD vorgenommen haben), wechseln Sie dann zum Master-Branch und führen Sie den temporären Branch mit zusammen der Meister.
git branch temp
git checkout master
git merge temp
Ich sehe, dass fast jeder eine Lösung vorgeschlagen hat, bei der ein temporärer Zweig erstellt wird. Nun muss man zugeben, dass, wann immer dieses „Committed in a Detached State“-Problem auftritt, es im Allgemeinen nach einem Commit erkannt wird. Und einen ganzen Branch für diesen einen mickrigen Commit zu erstellen – Klingt zu viel, oder? Vor allem in Projekten, wo man schon zwischen zu vielen Ästen herumspringt.
Was ist dann der einfache Weg? Verwenden Sie den Commit-Hash!
Wie bekomme ich das?
- Mach ein
git log
. Sie würden so etwas sehen:
commit 10bf8fe4d17bb7de59586a7abb6db321f0786bb3 (HEAD)
Author: Someone <[email protected]>
Date: So/me/day SO:ME:TI:ME
A commit message that doesn't mean much
commit a3cd1cedf1962916cdc2945f2bd2b271ec8b919d (origin/master, master)
Author: Someone <[email protected]>
Date: Some/other/day SOME:OTHER:TIME
Another commit message that doesn't mean much
commit 1bfabbe09c70419070fe29ff1ed276c0207bbe10
Author: Someone <[email protected]>
Date: Thu Jul 8 08:38:12 2021 +0530
Enough reading the example, focus on the answer!!
Nun sieht es zwar nach einem Normalfall aus, aber wenn man das macht git push
es würde sagen “Alles aktuell”.
Eine vorsichtige Person würde sehen, dass es nicht “aktuell” ist. HEAD
ist woanders als der Meister.
- Also, was als nächstes? Kopieren Sie einfach die Anfangszeichen des Hashs
10bf8fe4d1
. Und machen Sie zuerst a git checkout master
. Das würde Sie bewegen master
sich verzeigen. Und jetzt, da Sie den Hash bereits kopiert haben. Sie können eine git merge <hash>
. Mach ein git log
jetzt
Und VOILA:
commit 10bf8fe4d17bb7de59586a7abb6db321f0786bb3 (HEAD -> master)
Author: Someone <[email protected]>
Date: S/om/eday SO:ME:TI:ME
A commit message that doesn't mean much
commit a3cd1cedf1962916cdc2945f2bd2b271ec8b919d (origin/master)
Author: Someone <[email protected]>
Date: Some/other/day SOME:OTHER:TIME
Another commit message that doesn't mean much
commit 1bfabbe09c70419070fe29ff1ed276c0207bbe10
Author: Someone <[email protected]>
Date: Thu Jul 8 08:38:12 2021 +0530
Enough reading the example, focus on the answer!!
Jetzt die HEAD
scheint an der richtigen Stelle zu sein.
Jemand könnte fragen: „Was ist, wenn ich den Hash nicht habe? Ich wusste nichts über den Dangling Commit und habe einfach einen gemacht git checkout master
.” Keine Sorge, ich habe alles im Griff. Sie können den Commit-Hash an zwei Stellen finden:
- Als du das gemacht hast
git checkout master
, git
hatte dich so gewarnt
Warning: you are leaving 1 commit behind, not connected to
any of your branches:
10bf8fe A commit message that doesn't mean much
If you want to keep it by creating a new branch, this may be a good time
to do so with:
git branch <new-branch-name> 10bf8fe
Switched to branch 'master'
Sie können Ihren Schatz sehen (hash
), rechts?
- Sag mir nicht, du kannst es nicht finden. Es ist genau da. Aber wenn du es wirklich nicht kannst, dann kannst du es tun
git reflog
. Es wird Ihnen so etwas zeigen:
a3cd1ce (HEAD -> master, origin/master) [email protected]{0}: checkout: moving from 10bf8fe4d17bb7de59586a7abb6db321f0786bb3 to master
10bf8fe [email protected]{1}: commit: A commit message that doesn't mean much
Du siehst, da ist der Schatz, nach dem du gesucht hast… Das Haschisch.
Ich denke, dies deckt alle möglichen Szenarien ab, die in einem getrennten Zustand mit einem baumelnden Commit auftreten könnten. Vorsicht beim nächsten Mal!!
9162200cookie-checkWas tun mit einem Commit, das in einem abgetrennten Kopf gemacht wurde?yes
mögliches Duplikat von Git: HEAD ist verschwunden, möchte es mit Master zusammenführen
– Karl Bielefeldt
19. August 2011 um 17:10 Uhr
Ich könnte einen Screenshot eines Commit-Baums in diesem Zustand hinzufügen (wie ein Commit auf einem abgetrennten Kopf tatsächlich in Gitk oder SourceTree aussieht), das würde diese Frage noch besser machen.
– Florisla
6. Mai 2015 um 11:41 Uhr
Leider kann ich im Moment nicht, aber wenn Sie etwas zur Verfügung stellen können, freue ich mich, es hier zu sehen. Selbst wenn es ein Unentschieden sein muss, wird es klarer
– Benzol
6. Mai 2015 um 15:11 Uhr