PSA about Git in case folks haven't run into git push --force-with-lease
before: it just saved my bacon (again).
I have a shared branch for a feature my team at work is working on, feature/flub
[yes, okay, I've anonymised it]. We've been merging PRs into it.
To incorporate the build-fix changes above, I did this:
$ git checkout feature/flub # I've been working on other stuff; let's hop over to the shared branch.
$ git pull --rebase origin master # Take the branch, and pretend we *just* created it off the latest 'master' on GitHub.
$ git push --force-with-lease origin HEAD # Tell GitHub about the new change.
To github.com:myorg/thing.git
! [rejected] HEAD -> feature/flub (stale info)
error: failed to push some refs to '[email protected]:myorg/thing.git'
[... head scratching follows.]
"Oh, shit, right. I forgot to pull down the merges that have happened since I last updated my local version of this branch."
$ git fetch origin # Get an updated idea of what GitHub has
$ git reset --hard origin/feature/flub # Reset the local branch to match the remote one, blowing away any local changes I might have.
"Okay, back to what I originally tried..."
$ git pull --rebase origin master # Just do the same thing as earlier. There are more efficient ways, but this works.
$ tig # To double-check it looks fine;. 'tig' is my git browser; 'git log --stat' would also work fine.
$ git push --force-with-lease origin HEAD
Enumerating objects: 85, done.
...
+ abc123def...def456abc HEAD -> feature/flub (forced update)
If you want a more thorough intro to this feature (and other examples of bad situations it saves you from), here's a write-up from https://twitter.com/tarkasteve: https://developer.atlassian.com/blog/2015/04/force-with-lease/