Search code examples
gitgit-checkout

Git checkout - switching back to HEAD


I've been doing my project while at some point I discovered that one thing stopped working. I needed to look up the state of my code when it was working correctly, so I've decided to use git checkout (because I wanted to check-something-out). And so I've done

git checkout SHA

couple times while going back to point from which I can't go to HEAD, the output is following:

git checkout SHA-HEAD

error: Your local changes to the following files would be overwritten by checkout:
    [list of files]
Please, commit your changes or stash them before you can switch branches.
Aborting

I am pretty much sure I have NOT changed anything. The command

git checkout master

gives the same output.

Is there a way to go back to HEAD?

What is the safe way of "jumping over" history commits?


Solution

  • You can stash (save the changes in temporary place) then, back to master branch HEAD.

    $ git add .
    $ git stash
    $ git checkout master
    

    Note that some sites have changed the name of the default branch from "master" to "main" so you might have to use git checkout main instead.


    Jump Over Commits Back and Forth:

    • Go to a specific commit-sha.

        $ git checkout <commit-sha>
      
    • If you have uncommitted changes here then, you can checkout to a new branch | Add | Commit | Push the current branch to the remote.

        # checkout a new branch, add, commit, push
        $ git checkout -b <branch-name>
        $ git add .
        $ git commit -m 'Commit message'
        $ git push origin HEAD          # push the current branch to remote 
      
        $ git checkout master           # back to master branch now
      
    • If you have changes in the specific commit and don't want to keep the changes, you can do stash or reset then checkout to master (or, any other branch).

        # stash
        $ git add -A
        $ git stash
        $ git checkout master
      
        # reset
        $ git reset --hard HEAD
        $ git checkout master
      
    • After checking out a specific commit if you have no uncommitted change(s) then, just back to master or other branch.

        $ git status          # see the changes
        $ git checkout master
      
        # or, shortcut
        $ git checkout -      # back to the previous state