# Improve Git CLI Efficiency with Oh My Zsh

![Git aliases](https://cdn.hashnode.com/res/hashnode/image/upload/v1696377802373/f7ce110b-a50c-4f6e-bb2f-6f2975b82247.png align="left")

Do you use Git in the CLI or GUI? I was a heavy GUI user earlier in my career and I still do some quick operations using VSCode, PhpStorm, or Fork. At a previous company, I was forced to use GitKraken because it helped prevent developers from making Git errors. GitKraken is a great product and using the GUI tools definitely helped me become more comfortable using Git and learning the various commands. It really helps you visualize the changes being made to your repository.

However, as you start to progress in your career, you may find yourself gravitating more to the terminal to do a quick `git pull`, `git push`, or `git commit`. Or maybe you’re already an experienced Git user and do all your work in the CLI.

Using Git aliases in the CLI can make you even more efficient. That’s where [Oh My Zsh](https://ohmyz.sh/) comes in. Oh My Zsh is a framework for managing your Zsh configuration. Zsh is a shell similar to Bash but with some nice additional features. You can navigate to directories without typing `cd`. It offers spelling correction, plugins, themes, etc. One of my favorite features is the previous command search. I can start typing a command, then push “up” to see previous commands I’ve used starting with the text I already typed. If you are using a Mac, you’ve likely already have Zsh installed and running as the default. Otherwise, you can actually refer to the Oh My Zsh [docs](https://github.com/ohmyzsh/ohmyzsh/wiki/Installing-ZSH) to install it.

Once you are running Zsh, the next step is to install Oh My Zsh. This can be done using a simple `curl` or `wget` command:

```bash
sh -c “$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

sh -c "$(wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)"
```

Once installed, you’ll want to edit your `.zshrc` file, and look for the `plugins` array and make sure `git` is added. It should look something like the following:

```bash
plugins=(
  git
)
```

Once that is in place go ahead and source your `.zshrc` file, or just restart your terminal.

Now, we have a ton of aliases for common Git commands.

Here’s some of my favorites:

**Commits**

```bash
gcmsg ‘Commit messsage’ # Equivalent to git commit -m ‘Commit message’
```

**Amend all files to previous commit**

Sometimes I add a commit and realize I forgot to modify a file, so I make the change and then I want to amend the change into the previous commit.

```bash
gcan! # Equivalent to git commit — verbose — all — no-edit — amend
```

**Work in progress**

This creates a commit with the message `--wip-- [skip ci]` with all your currently modified files.

```bash
gwip
```

**Pushing and Pulling**

```bash
gl # Equivalent to git pull

gp # Equivalent to git push
```

**Git force push with lease**

You always need to be careful with force pushing a branch. One of the best things to do is force push with lease. This means the force push will fail if someone else has added additional commits to the remote branch.

```bash
ggfl # Equivalent to git push — force-with-lease
```

**Branches**

The aliases for creating and checking out branches are some of my most used.

```bash
gcb my-new-branch # Equivalent to git checkout -b my-new-branch

gco - # Equivalent to git checkout — which checks out the previous branch

gcm # Equivalent to git checkout main
```

**Rebasing**

I use tend to use `git rebase` pretty often. It’s definitely something that using a GUI really helped me understand what it was doing. I use `git rebase` to add my commits onto another branch. I also use `git rebase -- interactive HEAD~3` to reorder and modify commits, in this case, `HEAD~3` refers to the last three commits.

```bash
grb {branch} # Equivalent to git rebase {branch}

grbi HEAD~3 # Equivalent to git rebase — interactive HEAD~3
```

**Diff and Log**

```bash
gd # Equivalent to git diff
```

**Git log**

When I want to quickly see a one line version of all the previous commits, I use the `glog` alias.

```bash
glog # Equivalent to git log — oneline — decorate — graph
```

For a complete list of aliases available in the plugin, [click here](https://github.com/ohmyzsh/ohmyzsh/blob/master/plugins/git/README.md).

If you are using a different shell, like `bash` or `fsh`, there may be similar plugins available, but if not, you can still easily create you own aliases in your config file, like `.bashrc`. Or maybe there is a common Git commands (or CLI commands in general) that you use often enough to warrant an alias.

```bash
alias gc=’git commit -m’
```

Thanks for reading! I hope this will help you improve you Git CLI skills. Let me know if you have any other common Git aliases you use, either from the plugin or custom aliases you have created.
