Did you get this alarmingly guillotinesque message?
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.
If you want to create a new branch to retain commits you create,
you may do so (now or later) by using -c with the switch command.
Example:
git switch -c <new-branch-name>
Or undo this operation with:
git switch -
Turn off this advice by setting config variable advice.detachedHead
to false
HEAD is now at 0da5af9 line 1This means that you’ve checked out a commit directly instead of checking out a branch. That is, your HEAD is no longer attached to a branch, i.e. it is “detached”.
To get out of this, you can:
Undo the checkout that got you detached:
git switch -Switch to another branch entirely:
git switch mainMake a new branch here and check it out:
git switch -c newbranchAnd now your HEAD is no longer detached.
What if you ran:
git branch -c newbranchwhen you meant to run:
git switch -c newbranchBecause if you did, it could land you here:
fatal: The upstream branch of your current branch does not match
the name of your current branch. To push to the upstream branch
on the remote, use
git push origin HEAD:main
To push to the branch of the same name on the remote, use
git push origin HEAD
To choose either option permanently, see push.default in 'git help
config'.
To avoid automatically configuring an upstream branch when its name
won't match the local branch, see option 'simple' of
branch.autoSetupMerge in 'git help config'.Let’s check our branch names to see what’s going on:
$ git branch -vv
main fc645f2 [origin/main] line 2
* newbranch 7c21054 [origin/main: behind 1] line 1That tells us our local branch names and, in brackets, the corresponding remote-tracking branch. Notice anything fishy?
It seems main corresponds with origin/main.
And that newbranch also corresponds with origin/main! How?!
Well, when you did git branch -c newbranch, that copies the current branch (main in this example) into the other branch, including its remote-tracking branch. Bad news, since you really want newbranch to correlate to origin/newbranch, if anything.
You have a few options.
You want to push newbranch up to the origin and track it as origin/newbranch.
Just do this to push and change the remote-tracking branch name:
$ git push -u origin newbranchYou just want this to be a local branch and don’t need it on the remote.
In this case, just unset the upstream:
$ git branch --unset-upstream newbranchTrying to push and getting this message?
fatal: The current branch topic1 has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin topic1
To have this happen automatically for branches without a tracking
upstream, see 'push.autoSetupRemote' in 'git help config'This just means there’s no upstream tracking branch for topic1—it’s just a local branch.
If you do want to push this branch, just follow the suggested instruction.
If you are pushing from the wrong branch by accident, switch to the right one first.