Git has a strong commitment to backwards compatibility: many powerful features are hidden behind options rather than exposed as default behavior. Fortunately, Git also supports aliases, so you can create your own commands that do all manner of Git magic. Here’s a selection of the more useful (or at least entertaining) aliases defined in my .gitconfig:

Git Please

$ git config --global alias.please 'push --force-with-lease'

Git’s --force-with-lease option is far more polite than the --force option: it checks that your local copy of the ref that you’re overwriting is up-to-date before overwriting it. This indicates that you’ve at least fetched the changes you’re about to stomp. Since git push --force-with-lease is rather a lot to type out each time, I’ve created a polite alias for it: git please.

Git Commend

$ git config --global alias.commend 'commit --amend --no-edit

Ever commit and then immediately realize you’d forgotten to stage a file? Fret no more! git commend quietly tacks any staged files onto the last commit you created, re-using your existing commit message. So as long as you haven’t pushed yet, no-one will be the wiser.

$ git add Dockerfile
$ git commit -m ‘Update Bitbucket pipeline with new Docker image’
# (facepalm)
$ git add bitbucket-pipelines.yml
$ git commend

Git It

$ git config --global \
'!git init && git commit -m “root” --allow-empty'

The first commit of a repository can not be rebased like regular commits, so it’s good practice to create an empty commit as your repository root. git itboth initializes your repository and creates an empty root commit in one quick step. Next time you spin up a project, don’t just add it to version control: git it!

$ cd shiny-new-thing
$ git it
Initialized empty Git repository in /shiny-new-thing/.git/
[master (root-commit) efc9119] root

Git Staaash

$ git config --global alias.stsh 'stash --keep-index'
$ git config --global alias.staash 'stash --include-untracked'
$ git config --global alias.staaash 'stash --all'

git stash is one of the most delightful and useful Git commands. It takes any changes to tracked files in your work tree and stashes them away for later use, leaving you with a clean work tree to start hacking on something else. However if you’ve created any new files and haven’t yet staged them, git stash won’t touch them by default, leaving you with a dirty work tree. Similarly, the contents of untracked or ignored files are not stashed by default.

I’ve created a few handy aliases to handle different variations of git stash, based on which bits of your work tree you need to stash:

git stsh      # stash only unstaged changes to tracked files
git stash     # stash any changes to tracked files
git staash    # stash untracked and tracked files
git staaash   # stash ignored, untracked, and tracked fil

If in doubt, the long one (git staaash) will always restore your worktree to what looks like a fresh clone of your repository.

Git Merc

$ git config --global alias.merc 'merge --no-ff'

If you’re using a standard non-rebasing branching workflow, running a standard git merge to combine feature branches with the master is actually not ideal. With no options, git merge uses the --ff merge strategy, which will only create a merge commit if there are no new changes on the master branch, otherwise it simply “fast forwards” your master branch to point at the latest commit on your feature branch. Only sometimes creating a merge commit makes it tricky to reason about which code was developed on which branches when looking through your git history.

Image description

Git merc uses the --no-ff strategy, to always create a merge commit.

Image description

Incidentally, --no-ff is also what we use under the hood (by default) when merging pull requests in Bitbucket.

Git Grog

$ git config --global alias.grog 'log --graph --abbrev-commit
--decorate --all --format=format:"%C(bold blue)%h%C(reset)
- %C(bold cyan)%aD%C(dim white)
- %an%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n
- %C(white)%s%C(reset)"'

My git grog (or “graphical log”) alias has evolved over the years to the point where I’m no longer sure I understand exactly what it does. But it sure looks pretty:

Image description


When you first think about becoming a software developer, you probably have dreams of creating exciting new features, playing with new technologies, and writing some really cool and interesting code. What you probably don’t think about is working on a 10-year-old, crufty application written by some guy who left the company a long time ago, fixing the bugs he left behind.

Article content :

  • Great Developers Write Maintainable Code
  • The Boy Scout Rule “Leave the campground cleaner than you found it.”
  • Readability Is of Utmost Importance
  • Refactor Code to Make It Better
  • Automation Is Essential
  • If You Write Comments, Write Good Ones
  • Use resources for Learning to Write Maintainable Code

Image description


Image description

Improved UI:

  • increased size of the panel to give us more real estate to show information, while still keeping the interface clean.
  • Ghostery is divided into a right-side information pane, with the granular list of trackers, and a collapsable left-side summary pane, with high-level information and functionality.

Enhanced Features for Account Holders

  • The ability to sync settings across browsers and devices
  • Alerts for slow and non-secure trackers
  • Detected URLs for each tracker, provides additional intelligence and insight for the power user
  • A sneak peek at the Trackermap product; with one free scan a month, users can visually map all the tracker relationships on a page for greater insight

Tracker Alerts

  • Broken page alerts
  • Slow and non-secure tracker alerts (available to account holders)

Improved Purple BoxNothing polarizes our user base like the purple box, the real-time list of trackers that populates on the lower right-hand corner of the screen. A lot of users love it and a lot of users hate it. With Ghostery 7, we think the purple box is now easier to love and harder to hate, with a new UI that lets a user quickly collapse it or hide it when they don’t want it and expand it when they want to dig in and get additional information. For those that never want to see it, it’s easy to disable the purple box from the settings within the extension itself.

Other Features

  • Local settings directly in Ghostery itself, which means that users no longer have to navigate to a web UI if they want to change their preferences.
  • Links in the menu to submit new trackers and report broken pages with just one click, making it easier for our community of passionate users to help us make Ghostery even better.