Git meldt ‘You are in detached HEAD state’ of ‘HEAD detached at …’? Lees wat het is, hoe je werk bewaart met git switch -c en terugvindt via git reflog.
In Git wijst HEAD normaal naar een branch, zoals main, en die branch wijst naar de nieuwste commit. Maak je een commit, dan schuift de branch mee. In ‘detached HEAD’ wijst HEAD rechtstreeks naar één commit in plaats van naar een branch. Je kunt rondkijken, testen en zelfs committen, maar er hangt geen branchnaam aan je nieuwe commits.
Dat gebeurt als je een specifieke commit, een tag of een remote branch uitcheckt, bijvoorbeeld git checkout 1a2b3c4, git checkout v2.0 of git checkout origin/main. Het is ook normaal tijdens een rebase, in submodules (die staan standaard op een vaste commit) en in veel buildstraten en CI-omgevingen, die precies één commit ophalen.
Op zich is er niets mis. Het risico zit pas in wat je daarna doet: commit je in deze toestand en schakel je daarna naar een andere branch, dan hangen die commits nergens meer aan. Git waarschuwt dan dat je commits ‘achterlaat’. Ze zijn niet direct weg, maar wel lastig terug te vinden, en na verloop van tijd ruimt Git ze op.
git status begint met HEAD detached at of HEAD detached from in plaats van On branch main.1a2b3c4) in plaats van een branchnaam.git push faalt met ‘You are not currently on a branch’.git rebase --continue: zie merge conflict.Menunamen kunnen per versie of toestel iets anders heten. Loop de stappen op volgorde af en stop zodra het werkt.
Gebruik git status en git log --oneline -5. Zo zie je op welke commit je staat en of je midden in een rebase of merge zit. Staat er ‘rebase in progress’, rond die dan eerst af of breek hem af met git rebase --abort.
git status
git log --oneline --graph --all -10Heb je niets veranderd en wilde je alleen een oude versie bekijken, dan schakel je gewoon terug. git switch bestaat in recente Git-versies; in oudere versies gebruik je git checkout main. Met git switch - ga je terug naar waar je vandaan kwam.
git switch main
# of: git switch -
# oudere Git: git checkout mainHeb je in detached HEAD commits gemaakt die je wilt houden, maak dan een branch op de plek waar je nu staat, voordat je wegschakelt. De commits hangen dan aan die nieuwe branch en zijn veilig. Daarna kun je die branch normaal pushen of samenvoegen met main.
git switch -c mijn-werk
# oudere Git: git checkout -b mijn-werk
git push -u origin mijn-werkWil je de commits in main hebben, schakel dan naar main en voeg de nieuwe branch samen. Gaat het om één losse commit, dan kun je die ook overnemen met git cherry-pick.
git switch main
git merge mijn-werk
# of één commit:
git cherry-pick 1a2b3c4Ben je toch al teruggegaan naar main en mis je je commits, dan staan ze in de reflog: een logboek van waar HEAD de laatste tijd heeft gestaan. Zoek de regel met je commitbericht en maak op dat commitnummer een branch. Git noemt het nummer ook in de waarschuwing ‘you are leaving 1 commit behind’.
git reflog
git branch herstel 1a2b3c4git checkout origin/feature geeft altijd detached HEAD, omdat origin/feature een kopie is van de server en geen eigen branch. Wil je daarop werken, maak dan een lokale branch die hem volgt. Recente Git-versies doen dat automatisch als je git switch feature typt en die branch alleen op de server bestaat.
git switch feature
# of expliciet:
git switch -c feature --track origin/featureIn een submodule of buildomgeving is detached HEAD de bedoelde toestand: er wordt een vaste commit gebruikt. Wil je in een submodule iets wijzigen, schakel daar dan eerst naar een branch voordat je commit, anders raak je die commits makkelijk kwijt.
cd submodule-map
git switch mainLet op: Schakel niet weg uit detached HEAD als je daar commits hebt gemaakt die je wilt houden, voordat je er een branch van hebt gemaakt. Ze verdwijnen niet meteen, maar Git ruimt losse commits na verloop van tijd op.
git reflog.Kom je er met deze stappen niet uit, of wil je het liever niet zelf doen? We kijken online mee of komen langs. Hulp op afstand kost €20 per uur; komen we langs, dan is de prijs op aanvraag. Je weet vooraf waar je aan toe bent.
Schrijf kort wat er misgaat en wat je al hebt geprobeerd. Kies of we bellen, online meekijken of langskomen.
Nee, het is een gewone toestand om oude versies te bekijken. Alleen commits die je in die toestand maakt, moet je aan een branch hangen voordat je wegschakelt.
Met git switch main (of git checkout main) als je niets wilt bewaren, of met git switch -c nieuwe-branch als je je commits wilt houden.
Kijk in git reflog, zoek het commitnummer en maak er een branch van met git branch herstel <nummer>.
Buildomgevingen halen vaak precies één commit op, zonder branch. Dat is zo bedoeld en geen fout.
Hulp nodig van een mens? Website-onderhoud · Hosting en onderhoud · WordPress-support · Alle oplossingen