title: Push to master commit made on a detached head
body: <p>I wanted to redo changes from a previous commit. </p>
  
  <pre><code>Maxims-MacBook-Air:hellodebug.com maximveksler$ git log
  commit 7f9dd753d39fd65b4272af713ef9c07a9f84f016
  Author: Maxim Veksler &lt;maxim@vekslers.org&gt;
  Date:   Sun Dec 28 09:12:17 2014 +0200
  
      Imagine a Supercomputer Helping You Fix Bugs Faster
  
  commit 54561ed320633e72bb35a7ab668a9996e6ffca8f
  Author: Maxim Veksler &lt;maxim@vekslers.org&gt;
  Date:   Sun Dec 28 08:57:25 2014 +0200
  
      highcharts tweaks
  
  commit d57144cbd004b3b9e893e8d50d7077634824ce9a
  Author: Genady Okrain &lt;genady@okrain.com&gt;
  Date:   Mon Dec 22 18:46:21 2014 +0200
  
      sash api
  </code></pre>
  
  <p>So I've broke it on 7f9dd753d39fd65b4272af713ef9c07a9f84f016 and decided to unbreak it from 54561ed320633e72bb35a7ab668a9996e6ffca8f</p>
  
  <pre><code>Maxims-MacBook-Air:hellodebug.com maximveksler$ git checkout 54561ed320633e72bb35a7ab668a9996e6ffca8f
  Note: checking out '54561ed320633e72bb35a7ab668a9996e6ffca8f'.
  
  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 performing another checkout.
  
  If you want to create a new branch to retain commits you create, you may
  do so (now or later) by using -b with the checkout command again. Example:
  
    git checkout -b new_branch_name
  
  HEAD is now at 54561ed... highcharts tweaks
  </code></pre>
  
  <p>So far so good, now let's do the fixing.</p>
  
  <pre><code>Maxims-MacBook-Air:hellodebug.com maximveksler$ git commit -a -m'Back to not fucking it up'
  [detached HEAD b5cb3e4] Back to not fucking it up
  </code></pre>
  
  <p>But now I need to push this back into master, and upsteam. Here comes the messy part...</p>
  
  <pre><code>Maxims-MacBook-Air:hellodebug.com maximveksler$ git checkout HEAD
  Maxims-MacBook-Air:hellodebug.com maximveksler$ git status
  HEAD detached from 54561ed
  nothing to commit, working directory clean
  Maxims-MacBook-Air:hellodebug.com maximveksler$ git push
  fatal: You are not currently on a branch.
  To push the history leading to the current (detached HEAD)
  state now, use
  
      git push origin HEAD:&lt;name-of-remote-branch&gt;
  
  Maxims-MacBook-Air:hellodebug.com maximveksler$ git push origin HEAD:master
  Warning: Permanently added 'github.com,192.30.252.131' (RSA) to the list of known hosts.
  To git@github.com:maximveksler/hellodebug.com.git
   ! [rejected]        HEAD -&gt; master (non-fast-forward)
  error: failed to push some refs to 'git@github.com:maximveksler/hellodebug.com.git'
  hint: Updates were rejected because a pushed branch tip is behind its remote
  hint: counterpart. Check out this branch and integrate the remote changes
  hint: (e.g. 'git pull ...') before pushing again.
  hint: See the 'Note about fast-forwards' in 'git push --help' for details.
  </code></pre>
  
  <p>Right... so now I'm stuck. Let's try some more wonky stuff</p>
  
  <pre><code>Maxims-MacBook-Air:hellodebug.com maximveksler$ git up
  Fetching origin
  Warning: Permanently added 'github.com,192.30.252.128' (RSA) to the list of known hosts.
  You're not currently on a branch. I'm exiting in case you're in the middle of something.
  </code></pre>
  
  <p>git up won't talk to us, that's cool. I don't really need it anyway.</p>
  
  <pre><code>Maxims-MacBook-Air:hellodebug.com maximveksler$ git checkout master
  Warning: you are leaving 2 commits behind, not connected to
  any of your branches:
  
    e9e202c no border
    b5cb3e4 Back to not fucking it up
  
  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 e9e202c
  
  Switched to branch 'master'
  Your branch is up-to-date with 'origin/master'.
  </code></pre>
  
  <p>What? No! Come back commits, I love you.</p>
  
  <pre><code>Maxims-MacBook-Air:hellodebug.com maximveksler$ git status
  On branch master
  Your branch is up-to-date with 'origin/master'.
  nothing to commit, working directory clean
  </code></pre>
  
  <p>Lost! Forever? I hope not..</p>
  
  <pre><code>Maxims-MacBook-Air:hellodebug.com maximveksler$ git reflog
  7f9dd75 HEAD@{0}: checkout: moving from e9e202c4703939064e099b735ceeb6b78dc7933a to master
  e9e202c HEAD@{1}: commit: no border
  b5cb3e4 HEAD@{2}: commit: Back to not fucking it up
  54561ed HEAD@{3}: checkout: moving from master to 54561ed320633e72bb35a7ab668a9996e6ffca8f
  7f9dd75 HEAD@{4}: commit: Imagine a Supercomputer Helping You Fix Bugs Faster
  54561ed HEAD@{5}: commit: highcharts tweaks
  </code></pre>
  
  <p>OK, so they are somewhere in the wild, but how I get them back? It's too early to say goodbye.</p>
  
  <p>HELP?</p>