loading...

🌮 Git 'r done when you're done.

chiangs profile image Stephen E. Chiang Updated on ・2 min read

Tips & Tricks (4 Part Series)

1) 🔥 In case of fire: GTFO 2) Quick VS Code refactor/productivity trick 3) 🌐 How I host my projects on subdomains 4) 🌮 Git 'r done when you're done.

Once again I'm waiting for my app to run its tests and build so I thought I'd write another quickie.

Previously I showed how I wrote a git function for emergencies and I need to GTFO.

Today, I want to show you a more common process we all might do if we are working by ourselves or on small-teams.

When I'm done with a feature branch this is usually the steps I go through:

(Assuming I'm at the top level of my directory and I've done git push origin head -u in the past)

> {feature-branch} git add .
> {feature-branch} git commit -m "Awesome commit msg"
> {feature-branch} git push
> {feature-branch} git checkout develop
> {develop} git merge -
> {develop} git push

If I want to clean up the merged branch locally and remotely, I would also have to do this:

> {develop} git branch -d feature-branch
> {develop} git push origin :feature-branch

That's a lot of steps.

Here's how I make it easier with git done and git donep, I actually have an alias setup for git as g so I'll be using that from now on:

I'm going to go into my .gitconfig and create two new aliases like so:

[alias]
  done = ""
  donep = ""

Using the same syntax as my g tfo function I'll create done first which does the following:

  1. Merge the branch
  2. Deletes the local branch
  3. Deletes the remote branch

That function looks like this:

done = "!f() { git merge $1 && git branch -d $1 && git push origin :$1; }; f"

You will notice the $1. That is a reference to a variable that will be passed in when calling the function which happens to be the branch name. Now, I have tried using - and @{-1} but deleting the remote branch part of the function won't accept those as references to the last branch used. So unless a reader here has an idea, I am relegated to passing in the feature branch name specifically, which in a way makes it more reusable too, but a bit of a pain if the branch name is complex or hard to remember. But at least, you still only have to type it once!

🤷‍♂️So how do we use it?

> {develop} g done feature-branch

🤯 Boom. That's it.

But with this one, we haven't pushed the changes to develop remote. That's where donep comes in.

donep = "!f() { git merge $1 && git branch -d $1 && git push origin :$1 && git push; }; f"
> {develop} g donep feature-branch

note: this function also assumes you have done git push origin head -u and set the upstream. if you haven't and don't want to, you can modify the function to:

donep = "!f() { git merge $1 && git branch -d $1 && git push origin :$1 && git push origin $2; }; f"

and run it like:

> {develop} g donep feature-branch develop

🐱‍👤 Git r' done!

If you find this valuable, please leave a comment and follow me on Dev.to @chiangs and Twitter @chiangse, 🍻 cheers!

Tips & Tricks (4 Part Series)

1) 🔥 In case of fire: GTFO 2) Quick VS Code refactor/productivity trick 3) 🌐 How I host my projects on subdomains 4) 🌮 Git 'r done when you're done.

Posted on Oct 8 '19 by:

chiangs profile

Stephen E. Chiang

@chiangs

Pursuing a perpetual state of flow. Learn, Build, Eat, Sleep, Improve. Apply ☕️ & 🍺 liberally. 🇺🇸 🇩🇰 🇸🇯

Discussion

markdown guide