Git Deep Cuts

A friend and I have been working together to build a JavaScript game, and we’ve run into quite a few different roadblocks with Git version control. The software is incredibly flexible and powerful, but, with that flexibility, it brings a mind-boggling repertoire of commands that create a haystack of options around that needle that will have exactly your desired effect.

I’ve collected a few of the most common functions we find ourselves having to do on a regular basis and the somewhat unintuitive commands that will accomplish them.

Track a new remote branch

Frequently, one of your collaborators will start a new branch and push it to the remote repository. Now, you’d like to have a local branch tracking it.
git checkout -t <remote>/<whatever>

Undo a merge attempt with conflicts

If I try a merge that I thought would be simple, and find that it comes back with tons of conflicts, I may instead opt for a different merge strategy. Before I can try this, I’ll have to undo the merge in which I’m now entangled.
git merge --abort

Make a branch just like another

I feel there should be (and most likely is) a better way to do this. I want to be able to overwrite one branch with another. You could always delete the branch and then re-create it from your source branch, but that seems like a hassle. This is my current preferred method.

Switch to the branch you want to change (e.g. git checkout <destination_branch>)
git reset --hard <source_branch>

Delete a remote branch

Now, why didn’t I think to push to the remote and put a colon before the branch name in order to delete the remote branch? It’s all so clear now!

git push <remote> :<branch>
Note the colon before the branch name.

Stage a deleted file for commit

I wish this were as simple as adding the file as you would for a changed file. Instead, you need to remember a separate command to stage deleted files.
git rm <filename>

Post a question or comment