HEAD detached from origin/master

Another HEAD detached? Here you find out how to solve the problem.

head detached

If Git gives the following message:

HEAD detached from origin/master

it means that the commits you are making do not belong to a branch.

To understand this message better, it helps to understand a few concepts from Git. The concepts are:

Let me explain by taking an empty git project as our example.

Assume we have created a Git repository and don’t create a branch. We work with the default branch origin/master which is now our current branch.

The first time you have a finished unit of work, you create a commit that is added to the commit tree.

Commit 1:

SHA1 1a-2b-3c-4d-5e-6f
Parent null
Message Make it so!

Notice how the Parent is null. The first commit never has a parent. The commit tree now has 1 commit and the HEAD pointer can be pointed to it by referencing its SHA1.

Head looks like this:

HEAD 1a-2b-3c-4d-5e-6f

In other words, the HEAD Pointer points to the tip of the current branch. If you commit new changes, a commit will be created with parent set to 1a-2b-3c-4d-5e-6f

Let’s create a second commit

Commit 2:

SHA1 7g-8h-9i-1z-2y-3x
Parent 1a-2b-3c-4d-5e-6f
Message Cleanup stuff

Head now looks like this:

HEAD 7g-8h-9i-1z-2y-3x

A table of commits would look like this:

SHA1  
1a-2b-3c-4d-5e-6f  
7g-8h-9i-1z-2y-3x <=– HEAD

If for some reason HEAD points to a commit that does not belong to a branch, we are dealing with a detached HEAD.

Fix detached HEAD

git checkout origin/master

If you made commits while HEAD was detached, Git will warn you:

Warning: you are leaving 3 commits behind, not connected to
any of your branches:

  b1be274 v1.0
  d438323 css
  539a8f7 cleanup

If you want to keep them by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> b1be274
git branch fix-detached-HEAD b1be274
git checkout -B master fix-detached-HEAD

You are now back on the master branch and Git will show:

Your branch is ahead of 'origin/master' by 3 commits.
  (use "git push" to publish your local commits)

To update the server, execute:

git push origin master

Tips on working with Git

Fixing the repository with the command line might lead to mistakes that delete code. It can never hurt to create a backup of your code before trying to execute all these commands. Better safe than sorry!

Written by Loek van den Ouweland on September 16, 2016. Questions regarding this artice? You can send them to the address below.
By using this site, you acknowledge that you have read and understand our Cookie and Privacy Policy.