Git Detached Head: What This Means and How to Recover

2,384
CloudBees
CloudBees, the enterprise software delivery company, provides the industry’s leading DevOps technology platform. CloudBees enables developers to focus on what they do best: Build stuff that matters, while providing peace of mind to management with powerful risk mitigation, compliance and governance tools.

The following is a guest blog post written by Carlos Schults.

Newcomers to Git often get confused with some of the messages that the VCS tool throws at them. The “You are in ‘detached HEAD’ state” one is certainly one of the weirdest. After coming across this message, most people start furiously Googling “git detached HEAD,” “git detached HEAD fix,” or similar terms, looking for anything that might be of help. If that’s your case, you’ve come to the right place.

Here’s the first thing you should know: you haven’t done anything wrong. Your repo isn’t broken or anything like that. The expression “Detached HEAD” might sound somewhat bizarre, but it’s a perfectly valid repository state in Git. Sure, it’s not the normal state, which would be—you’ve guessed it!—when HEAD is attached. The second thing you need to know is that going back to normal is super easy. If you just want to do that and get on with your day, go to the “How Do I Fix a Detached Head in Git?” section of this post to see how it’s done.

But if you want to know more—and I guess you do—stick around and we’ll help you. What does HEAD mean in Git? What does it mean for it to be attached or detached? These are the kind of questions we’ll answer in this post. By the end of it, you’ll have a better understanding of Git’s fundamentals, and detached HEADs will never trouble you again. Let’s dig in.

Git Detached HEAD: Reproducing the “Problem”

Let’s start with a quick demo showing how to reach the detached HEAD state. We’ll create a repository and add some commits to it:

mkdir git-head-demo
cd git-head-demo
git init
touch file.txt
git add .
git commit -m "Create file"
echo "Hello World!" > file.txt
git commit -a -m "Add line to the file"
echo "Second file" > file2.txt
git add .
git commit -m "Create second file"

With the commands above, we’ve created a new folder with a new repository inside it. Then we created a new empty file and committed that with the message “Create file.” Next, we added a line to that file and committed the change, with the message “Add a line to the file.” Finally, we’ve created another file with one line of text and committed that as well. If you use the git log –oneline command, you’ll see something like this:

Let’s say that, for testing purposes, we need to see how things were at the time of the second commit. How would we do that? As it turns out, we can check out a commit the same way we’d check out branches. Remember, branches are just names for commits. So, based on the example output above, we’d run git checkout 87ec91d. Keep in mind that if you’re following along by executing these commands on your own system, the hash for your commits will be different from those in the example. Use the log command to find it.

After running the command, we get the “You are in ‘detached HEAD’ state[…]” message. Before we go on, make sure you keep this in mind: you get to the detached HEAD state by checking out a commit directly.

What Is a HEAD in Git?

What does HEAD mean in Git? To understand that, we have to take a step back and talk fundamentals.

A Git repository is a collection of objects and references. Objects have relationships with each other, and references point to objects and to other references. The main objects in a Git repository are commits, but other objects include blobs and trees. The most important references in Git are branches, which you can think of as labels you put on a commit.

HEAD is another important type of reference. The purpose of HEAD is to keep track of the current point in a Git repo. In other words, HEAD answers the question, “Where am I right now?”

For instance, when you use the log command, how does Git know which commit it should start displaying results from? HEAD provides the answer. When you create a new commit, its parent is indicated by where HEAD currently points to.

Are you in ‘detached HEAD’ state?

You’ve just seen that HEAD in Git is only the name of a reference that indicates the current point in a repository. So, what does it mean for it to be attached or detached?

Most of the time, HEAD points to a branch name. When you add a new commit, your branch reference is updated to point to it, but HEAD remains the same. When you change branches, HEAD is updated to point to the branch you’ve switched to. All of that means that, in these scenarios, HEAD is synonymous with “the last commit in the current branch.” This is the normal state, in which HEAD is attached to a branch.

A visual representation of our demo repository would look like this:

As you can see, HEAD points to the master branch, which points to the last commit. Everything looks perfect. After running git checkout 87ec91d, the repo looks like this:

This is the detached HEAD state; HEAD is pointing directly to a commit instead of a branch.

Benefits of a Git Detached HEAD

Are there good reasons for you to be in the detached HEAD state? You bet there are!

As you’ve seen, you detach the HEAD by checking out a commit. That’s already useful by itself since it allows you to go to a previous point in the project’s history. Let’s say you want to check if a given bug already existed last Tuesday. You can use the log command, filtering by date, to start the relevant commit hash. Then you can check out the commit and test the application, either by hand or by running your automated test suite.

What if you could not only take a look at the past, but also change it? That’s what a detached HEAD allows you to do. Let’s review how the detached message starts:

You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by switching back to a branch.

In this state, you can make experimental changes, effectively creating an alternate history. So, let’s create some additional commits in the detached HEAD state and see how our repo looks afterward:

echo "Welcome to the alternate timeline, Morty!" > new-file.txt
git add .
git commit -m "Create new file"
echo "Another line" >> new-file.txt
git commit -a -m "Add a new line to the file"

We now have two additional commits that descend from our second commit. Let’s run git log –oneline and see the result:

This is what the diagram looks like now:

What should you do if you want to keep those changes? And what should you do if you want to discard them? That’s what we’ll see next.

How Do I Fix a Detached HEAD in Git?

You can’t fix what isn’t broken. As I’ve said before, a detached HEAD is a valid state in Git. It’s not a problem. But you may still want to know how to get back to normal, and that depends on why you’re in this situation in the first place.

Scenario #1: I’m Here by Accident

If you’ve reached the detached HEAD state by accident—that is to say, you didn’t mean to check out a commit—going back is easy. Just check out the branch you were in before:

git checkout <branch-name>

If you’re using Git 2.23.0 or newer, you can also use switch instead of checkout:

git switch <branch-name>

Scenario #2: I’ve Made Experimental Changes and I Want to Discard Them

You’ve entered the detached HEAD state and made a few commits. The experiment went nowhere, and you’ll no longer work on it. What do you do? You just do the same as in the previous scenario: go back to your original branch. The changes you made while in the alternate timeline won’t have any impact on your current branch.

Scenario #3: I’ve Made Experimental Changes and I Want to Keep Them

If you want to keep changes made with a detached HEAD, just create a new branch and switch to it. You can create it right after arriving at a detached HEAD or after creating one or more commits. The result is the same. The only restriction is that you should do it before returning to your normal branch.

Let’s do it in our demo repo:

git branch alt-history
git checkout alt-history

Notice how the result of git log –oneline is exactly the same as before (the only difference being the name of the branch indicated in the last commit):

We could just run git branch alt-history, and we’d be all set. That’s the new—and final—version of our diagram:

Getting Rid of the “Git Detached HEAD” Message

Before wrapping up, let’s share a final quick tip. Now that you understand everything about detached HEAD in Git and know that it’s not that big of a deal, seeing that message every time you check out a commit might become tiring. Fortunately, there’s a way to not see the warning anymore. Just run the following command:

git config advice.detached head false

Easy, right? You can also use the –global modifier if you want the change to apply to every repository and not only the current one.

Git Detached HEAD: Less Scary Than It Sounds

A message talking about heads not being attached doesn’t sound like your routine software error message, right? Well, it’s not an error message.

As you’ve seen in this post, a detached HEAD doesn’t mean something is wrong with your repo. Detached HEAD is just a less usual state your repository can be in. Aside from not being an error, it can actually be quite useful, allowing you to run experiments that you can then choose to keep or discard.

Carlos Schults is a .NET software developer with experience in both desktop and web development, and he’s now trying his hand at mobile. He has a passion for writing clean and concise code, and he’s interested in practices that help you improve app health, such as code review, automated testing, and continuous build.

CloudBees
CloudBees, the enterprise software delivery company, provides the industry’s leading DevOps technology platform. CloudBees enables developers to focus on what they do best: Build stuff that matters, while providing peace of mind to management with powerful risk mitigation, compliance and governance tools.
Tools mentioned in article
Open jobs at CloudBees
Senior Product Security Engineer
US, Canada, or EMEA

OUR CUSTOMERS DEVELOP SOFTWARE AT THE SPEED OF IDEAS

CloudBees, the enterprise software delivery company, provides the industry’s leading DevOps technology platform. CloudBees enables developers to focus on what they do best: Build stuff that matters while providing peace of mind to management with powerful risk mitigation, compliance, and governance tools. Used by many of the Fortune 100, CloudBees is helping thousands of companies harness the power of continuous everything and gets them on the fastest path from a great idea, to great software, to amazing customer experiences, to being a business that changes lives.

Backed by Matrix Partners, Lightspeed Venture Partners, Verizon Ventures, Delta-v Capital, Golub Capital, and Unusual Ventures, CloudBees was founded in 2010 by former JBoss CTO Sacha Labourey and an elite team of continuous integration, continuous delivery, and DevOps professionals.

The Product Security organization oversees engineering security practices across the entire product organization and therefore the securing of multiple products (both on-prem builds and SaaS). Product Security is multi-faceted with respect to the counterparts it is interacting with: engineering teams, product management, product marketing, legal and external customers; it is at the cross-road of everything we build.

You will be involved in a vast array of endeavors to build our security program, which includes a lot of freedom to define our next steps. Your primary task will be to automate and glue a variety of systems and tools to come up with a state-of-the-art security pipeline. You will also lean on other engineering endeavors for our compliance program, work on the application security pipeline, drive cloud security practices, docker and kubernetes security, vulnerability management, educating our engineering workforce, or harden our software supply chain.

Location / TimeZone: We fully embrace remote working. We use remote tools extensively, including Slack and Google Docs.

What You’ll Do

  • Work on web application security, including front-end and back-end.
  • Work hand in hand with Ops on cloud security and incident response.
  • Engineer and automate our global product security program:
    • Define and implement application security pipelines.
    • Work on our software supply chain security with product teams.
    • Develop or integrate libraries and other building blocks to enable all CloudBees services to operate and handle user data more securely.
  • Drive and follow-up on risk assessments, security reviews with Product teams.
  • Work closely with the product engineering teams to deliver security requirements/features into the design, implementation, and delivery of new services, based on OWASP SAMM.
  • Improve and use our main vulnerability management application (OWASP DefectDojo)
    • Including strengthening its integration to other tools
  • Help raise the profile of security across engineering:
    • Educate and evangelize security engineering throughout the organization.
    • Re-engineer processes as needed in collaboration with the teams.

 What The Role Requires

  • The hacker mentality of doing whatever it takes to figure out and solve a problem.
    • There is no lie in saying we will be asking for a lot :-)
  • Prior experience (5+ years) as an appsec engineer, including:
    • Risk Assessment / Threat Modeling
    • Security reviews (incl. active vulnerability research)
    • Automation
    • Secure SDLC
  • Prior experience (2+ years) working with Product teams, directly interacting with software development and operations teams.
  • Proficiency using CI/CD tools to create and manage automated pipelines (e.g. Jenkins pipelines, or any other of our competition ;-))
  • Strong proficiency in scripting (Golang, Python, Java/Groovy preferred)
  • Experience with authentication/authorization protocols such as OAuth, OICD, SAML.
  • Practice of the OWASP Top Ten (web, API) security risks and how to mitigate them.
  • Infrastructure level experience with Google Cloud, Kubernetes (GKE), Terraform and Helm charts would be nice to have.
  • Passion for automating all the things, while keeping security in mind at all times.

WHAT YOU’LL GET

  • Highly competitive benefits and vacation package
  • Ability to work for one of the fastest growing companies with some of the most talented people in the industry
  • Team outings
  • Fun, Hardworking, and Casual Environment
  • Endless Growth Opportunities

We have a culture of movers and shakers and are leading the way for everyone else with a vision to transform the industry. We are authentic in who we are. We believe in our abilities and strengths to change the world for the better. Being inclusive and working together is at the heart of everything we do. We are naturally curious. We ask the right questions, challenge what can be done differently and come up with intelligent solutions to the problems we find. If that’s you, get ready to bee impactful and join the hive.

At CloudBees, we truly believe that the more diverse we are, the better we serve our customers. A global community like Jenkins demands a global focus from CloudBees. Organizations with greater diversity—gender, racial, ethnic, and global—are stronger partners to their customers. Whether by creating more innovative products, or better understanding our worldwide customers, or establishing a stronger cross-section of cultural leadership skills, diversity strengthens all aspects of the CloudBees organization.

In the technology industry, diversity creates a competitive advantage. CloudBees customers demand technologies from us that solve their software development, and therefore their business problems, so that they can better serve their own customers. CloudBees attributes much of its success to its worldwide work force and commitment to global diversity, which opens our proprietary software to innovative ideas from anywhere. Along the way, we have witnessed firsthand how employees, partners, and customers with diverse perspectives and experiences contribute to creative problem solving and better solutions for our customers and their businesses.

 

Sr. Solutions Architect, Southeast
, US East

CloudBees, the enterprise software delivery company, provides the industry’s leading DevOps technology platform. CloudBees enables developers to focus on what they do best: Build stuff that matters while providing peace of mind to management with powerful risk mitigation, compliance, and governance tools. Used by many of the Fortune 100, CloudBees is helping thousands of companies harness the power of continuous everything and gets them on the fastest path from a great idea, to great software, to amazing customer experiences, to being a business that changes lives.

Backed by Matrix Partners, Lightspeed Venture Partners, Verizon Ventures, Delta-v Capital, Golub Capital, and Unusual Ventures, CloudBees was founded in 2010 by former JBoss CTO Sacha Labourey and an elite team of continuous integration, continuous delivery, and DevOps professionals.

CloudBees is looking for a Solutions Architect to join the CloudBees sales organization assisting with our customer in the Southeast, US. This role is key for our sales organization. The position involves working side-by-side with the sales team, uncovering and developing opportunities by articulating the technical options for potential customers. While this role requires technology depth and awareness, this is a sales-driven position. The role carries a quota and directly impacts the revenue of the company. The ideal candidate will have been involved in the continuous integration, continuous delivery and DevOps space with strong interpersonal skills. Prior technical sales positions and experience would be helpful.

This is an outstanding opportunity for a Solutions Architect to become a specialist in what’s soon to become the future of software development, and to work closely with recognized professionals in the continuous integration, continuous delivery and DevOps markets.

This will be a remote position with some travel required.

What You'll Do

  • Become an expert on all things related to Jenkins, continuous integration, continuous delivery and DevOps
  • Serve as a liaison between sales, support, engineering and the customer/prospect
  • Field more sophisticated user questions to sales for possible upsell to annual/global deals
  • Understand the company’s products, competitors, value proposition and positioning
  • Assist the sales team on calls and e-mail exchanges with prospects
  • Maintain and develop FAQ fed by information from customers, prospects and the sales team
  • When recurring questions are identified, writing technical content to increase the Knowledge Base and crafting videos/webcasts and other content
  • Work with the product team to identify product priorities discovered in field engagements
  • Attend trade shows, when appropriate
  • Deliver regular demos of the product (Google Hangout, webcast, etc.)

Who You Are

  • Pre-Sales experience or strong technical background with ability to learn pre-sales
  • Self-driven, enjoys working with people and creating relationships
  • Familiarity with software development or operations
  • Hands-on experience with continuous integration and its real-world role application in delivering software is a plus
  • Familiarity with Jenkins, Continuous Integration, Continuous Delivery, DevOps, and associated tools
  • Software development life cycle experience

What You’ll Get

  • Highly competitive benefits and vacation package
  • Ability to work for one of the fastest-growing companies with some of the most talented people in the industry
  • Fun, Hardworking, and Casual Environment
  • Endless Growth Opportunities

At CloudBees, we truly believe that the more diverse we are, the better we serve our customers. A global community like Jenkins demands a global focus from CloudBees. Organizations with greater diversity—gender, racial, ethnic, and global—are stronger partners to their customers. Whether by creating more innovative products, or better understanding our worldwide customers, or establishing a stronger cross-section of cultural leadership skills, diversity strengthens all aspects of the CloudBees organization.

In the technology industry, diversity creates a competitive advantage. CloudBees customers demand technologies from us that solve their software development, and therefore their business problems, so that they can better serve their own customers. CloudBees attributes much of its success to its worldwide workforce and commitment to global diversity, which opens our proprietary software to innovative ideas from anywhere. Along the way, we have witnessed firsthand how employees, partners, and customers with diverse perspectives and experiences contribute to creative problem solving and better solutions for our customers and their business.

Senior Software Engineer
US East or EMEA

OUR CUSTOMERS DEVELOP SOFTWARE AT THE SPEED OF IDEAS

CloudBees, the enterprise software delivery company, provides the industry’s leading DevOps technology platform. CloudBees enables developers to focus on what they do best: Build stuff that matters while providing peace of mind to management with powerful risk mitigation, compliance, and governance tools. Used by many of the Fortune 100, CloudBees is helping thousands of companies harness the power of continuous everything and gets them on the fastest path from a great idea, to great software, to amazing customer experiences, to being a business that changes lives.

Backed by Matrix Partners, Lightspeed Venture Partners, Verizon Ventures, Delta-v Capital, Golub Capital, and Unusual Ventures, CloudBees was founded in 2010 by former JBoss CTO Sacha Labourey and an elite team of continuous integration, continuous delivery, and DevOps professionals.

Why this Role

The team works across the business to be the critical link across the suite of products CloudBees offers. We creatively solve problems between business functions with resilient modern software. The team mission going forward is to deliver product lead growth through our website with both content and experiences that delight developers.

What You’ll Do

  • Work on a full-stack SaaS team with your focus being on the back-end services.
  • Platform mindset to integrate all CloudBees products with focus areas including:
    • Event and metrics data acquisition
    • Identity and user management
    • Customer state management
    • Subscription management
  • Work closely with the Product and Operations team to design, develop, and deliver organization-critical services and tools.
  • Application modernization to build the new stuff to replace some old stuff

Why CloudBees?

  • CloudBees is the hub of enterprise Jenkins and DevOps, providing the fastest path from ideas to software with smarter solutions for continuous development and delivery.
  • We build our business on Jenkins by offering enterprise solutions, professional services, and our customer range from the blue chips to small innovative companies
  • We work on various projects in different areas. We are flexible about changing teams and assignments according to the interest and passion of engineers.
  • Our Engineering teams are distributed by design. You can work from one of our offices or remotely without feeling disconnected
  • You have an opportunity to contribute to open-source projects and communities during your working time
  • We work with a wide variety of emerging technologies including, Docker, Kubernetes, cloud computing platforms (Amazon Web Services, Google Cloud, etc.), ElasticSearch, etc.
  • We offer an attractive benefits package including stock options

What The Role Requires

  • Backend development experience (e.g. Node, Groovy, Java, Ruby, etc); past experience working on mid-to-large sized Node applications.
  • Results-oriented with a continuous delivery mindset
  • Spoken English fluency and strong written communication skills.
  • Strong familiarity with GraphQL and RESTful API practices and other backend web patterns.
  • Experience building complex applications with modern best practices (e.g. test driven development, continuous delivery, code reviews, etc.)
  • Understands
    • Microservices
    • Continuous Delivery
    • Containers (K8s and Docker)
  • Considers themselves a hacker and will do whatever it takes to solve the problem
  • Understands the principles of software craftsmanship, writing clean code, even when working on extremely hard problems under deadline pressure.
  • Operations/Systems Administration experience a plus.
  • Ability to work with a distributed team across multiple time zones.
  • Bonus: IAM experience

What You’ll Get

  • Highly competitive benefits and vacation package
  • Ability to work for one of the fastest growing companies with some of the most talented people in the industry
  • Team outings
  • Fun, Hardworking, and Casual Environment
  • Endless Growth Opportunities

We have a culture of movers and shakers and are leading the way for everyone else with a vision to transform the industry. We are authentic in who we are. We believe in our abilities and strengths to change the world for the better. Being inclusive and working together is at the heart of everything we do. We are naturally curious. We ask the right questions, challenge what can be done differently and come up with intelligent solutions to the problems we find. If that’s you, get ready to bee impactful and join the hive.

At CloudBees, we believe that the more diverse we are, the better we serve our customers.  A global community like Jenkins demands a global focus from CloudBees.  Organizations with greater diversity—gender, racial, ethnic, and global—are stronger partners to their customers.  Whether by creating more innovative products, or better understanding our worldwide customers, or establishing a stronger cross-section of cultural leadership skills, diversity strengthens all aspects of the CloudBees organization.

In the technology industry, diversity creates a competitive advantage.  CloudBees customers demand technologies from us that solve their software development, and therefore their business problems so that they can better serve their customers.  CloudBees attributes much of its success to its worldwide workforce and commitment to global diversity, which opens our proprietary software to innovative ideas from anywhere.  Along the way, we have witnessed firsthand how employees, partners, and customers with diverse perspectives and experiences contribute to creative problem solving and better solutions for our customers and their businesses.

Senior Curriculum Developer / Technic...

OUR CUSTOMERS DEVELOP SOFTWARE AT THE SPEED OF IDEAS

CloudBees, the enterprise software delivery company, provides the industry’s leading DevOps technology platform. CloudBees enables developers to focus on what they do best: Build stuff that matters while providing peace of mind to management with powerful risk mitigation, compliance, and governance tools. Used by many of the Fortune 100, CloudBees is helping thousands of companies harness the power of continuous everything and gets them on the fastest path from a great idea, to great software, to amazing customer experiences, to being a business that changes lives.

 

Backed by Matrix Partners, Lightspeed Venture Partners, Verizon Ventures, Delta-v Capital, Golub Capital, and Unusual Ventures, CloudBees was founded in 2010 by former JBoss CTO Sacha Labourey and an elite team of continuous integration, continuous delivery, and DevOps professionals.

 

What You’ll Do

 

  • Develop, validate, deliver, and maintain highly technical, enterprise-level, self-paced and instructor-led training curriculum to support the customer journey and customer requests
  • Develop and maintain working relationships with subject matter experts to publish best practices and reference architectures
  • Collaborate with operations engineering to develop and test training lab environments
  • Perform structural and copy editing on existing content to match curriculum standards and success criteria
  • Validate lab instructions as part of the curriculum development process
  • Create engaging, easy-to-follow presentations for instructor-led training sessions
  • Scope projects and estimate time requirements to meet deadlines and set expectations
  • Work on multiple projects at a time while tracking progress and deadlines as well as coordinating with subject matter experts
  • Deliver instructor-led training both virtually and in-person
  • Troubleshoot lab exercises during instructor-led training engagements

 

What the Job Requires

 

  • Excellent written and spoken English language skills
  • Excellent problem solving, organization, and communication skills
  • 7+ years of curriculum development and technical instructor experience
  • 2+ years of enterprise-level curriculum development and technical instructor experience
  • Proficiency with source code management, preferably Git
  • Proficiency with bug tracking systems, preferably Jira
  • Proficiency with markup syntax such as AsciiDoc, Markdown, or reStructuredText
  • Proficiency with at least one Learning Management System
  • High proficiency in working with subject matter experts to clarify and organize complex technical content
  • Willingness to learn about cloud hosting (AWS, Azure, Google Cloud, etc.) and virtualization technologies (Docker, Kubernetes, etc.)
  • Ability to understand and explain highly technical enterprise-level curriculum
  • Experience with continuous integration/delivery/deployment technologies and processes is a plus
  • Experience designing and delivering video-based, self-paced training is a plus

 

We have a culture of movers and shakers and are leading the way for everyone else with a vision to transform the industry. We are authentic in who we are. We believe in our abilities and strengths to change the world for the better. Being inclusive and working together is at the heart of everything we do. We are naturally curious. We ask the right questions, challenge what can be done differently and come up with intelligent solutions to the problems we find. If that’s you, get ready to bee impactful and join the hive.

 

At CloudBees, we truly believe that the more diverse we are, the better we serve our customers. A global community like Jenkins demands a global focus from CloudBees. Organizations with greater diversity—gender, racial, ethnic, and global—are stronger partners to their customers. Whether by creating more innovative products, or better understanding our worldwide customers, or establishing a stronger cross-section of cultural leadership skills, diversity strengthens all aspects of the CloudBees organization.

 

In the technology industry, diversity creates a competitive advantage. CloudBees customers demand technologies from us that solve their software development, and therefore their business problems, so that they can better serve their own customers. CloudBees attributes much of its success to its worldwide work force and commitment to global diversity, which opens our proprietary software to innovative ideas from anywhere. Along the way, we have witnessed firsthand how employees, partners, and customers with diverse perspectives and experiences contribute to creative problem solving and better solutions for our customers and their businesses.

 

Verified by
Technical Evangelist
You may also like