Running with scissors

Programmers like to talk about “sharp tools”. Git is an excellent example of one.

Recently a colleague of mine accidentally pushed to the wrong repository (he somehow had the wrong remote set up). The good, and bad, thing about Git is that it doesn’t care. No warnings, no errors, just a merge commit.

To compound the problem, nobody noticed, and further commits were piled on top.

The first thing I did was make a new branch:

git checkout -b oops

And push it:

git push origin oops

That way, no matter what a mess I made of my local repo, I had a copy as it was originally.

I then rewound my repo to before the incident:

git checkout master
git reset --hard INSERT_TREEISH_HERE

And pushed that (you have to force it, as it’s not FF):

git push -f origin master

Finally I cherry-picked the changes from the future:

git cherry-pick TREEISH_1
git cherry-pick TREEISH_2
git cherry-pick TREEISH_3

Then pushed:

git push origin master

And, hopefully, we’re back to how we should have been :)

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s