Git: set branch to current ref

Due to the use of submodules in my projects I'm finding myself often on "(no branch)". As I'm also adding code to those submodules I'm committing in there. When I then want to push those submodules I need to be on a branch of course. Hence my question:

Is there a way/shortcut in git (command line) to set a local branch to the current commit/HEAD without the detour of

git checkout the_branch
git reset --hard <previous commit-ish>

To be more precise, my real problem with the above "detour" is that I'm temporarily leaving the original HEAD with the checkout-command. That can be avoid with the git branch -f command (thanks to CharlesB).


Solution 1:

Checkout the branch with -B: this will reset the branch to HEAD, which is the current ref.

git checkout -B <branch> 

From the docs:

If -B is given, is created if it doesn’t exist; otherwise, it is reset. This is the transactional equivalent of

$ git branch -f <branch> [<start point>]
$ git checkout <branch>

that is to say, the branch is not reset/created unless "git checkout" is successful.

Solution 2:

git checkout -B the_branch HEAD

This will checkout the_branch at commit HEAD, even if the_branch pointed somewhere else before. It was added in one of the last few git releases, so you might not have it available. An alternate route would be git branch -D the_branch && git checkout -b the_branch