Stephen

80 posts

Useful Git Aliases

Here is a list of useful aliases for git that can be used on the command line.

All of them for /etc/gitconfig or ~/.gitconfig

[alias]
    a = !git add -A && git commit -m
    ap =  "!f(){ git add -A && git commit -m \"$1\" && git push; };f "
    b = branch
    br = branch
    bra = branch
    cl = clone
    co = checkout
    cob = checkout -b
    com = commit
    ct = commit
    df = diff
    dif = diff
    hist = log --oneline --graph --decorate --all
    lg = log --pretty=format:\"%C(magenta)%h%Creset -%C(red)%d%Creset %s %C(dim green)(%cr) [%an]\" --abbrev-commit -30
    main = !git checkout main && git pull
    nb = !git checkout main && git pull && git checkout -b
    open = "!$(which xdg-open 2>/dev/null || which open  2>/dev/null || which start  2>/dev/null) $(git config remote.${1:-origin}.url | sed -E \"s#:([^:]+)\\$#/\\\\1#;s#^(ssh://)?[a-z]+@#https://#g;s#\\\\.git\\$##g;s#^([^a-zA-Z]|([a-zA-Z]+[^a-zA-Z:]))#https://\\\\1#g\")"
    pr = "!$(which xdg-open 2>/dev/null || which open  2>/dev/null || which start  2>/dev/null) $(git config remote.${1:-origin}.url | sed -E \"s#:([^:]+)\\$#/\\\\1#;s#^(ssh://)?[a-z]+@#https://#g;s#\\\\.git\\$##g;s#^([^a-zA-Z]|([a-zA-Z]+[^a-zA-Z:]))#https://\\\\1#g;s#\\$#/compare/main...$(git symbolic-ref --short HEAD)#g\")"
    recent = branch --sort=-committerdate --format=\"%(committerdate:short) %(align:25)%(authorname)%(end) %(refname:short)\"
    s = status
    st = status
    stat = status
    undo = reset --soft HEAD~1

Most of these are short abbreviatons so you don't have to type the entire git command, but a few of them are more complicated and are explained in detail below:

Add and commit with a commit message

Use case: you want to commit everything.

Without the alias: git add -A && git commit -m 'Feature X'

With the alias: git a 'Feature X'

Installing the alias: git config --global alias.a '!git add -A && git commit -m'

Add, commit with a commit message, and push to origin

Use case: you want to commit everything and push your work

Without the alias: git add -A && git commit -m 'Feature X' && git push

With the alias: git ap 'Feature X'

Installing the alias: git config --global alias.ap '"!f(){ git add -A && git commit -m \"$1\" && git push; };f "'

Show the git log with branch history graphed

Use case: you want to see the the git log with colors showing which commits were made on branches.

Without the alias: git log --oneline --graph --decorate --all

With the alias: git hist

Installing the alias: git config --global alias.hist 'log --oneline --graph --decorate --all'

Show the git log with colors

Use case: prettier git log

Without the alias: git log --pretty=format:\"%C(magenta)%h%Creset -%C(red)%d%Creset %s %C(dim green)(%cr) [%an]\" --abbrev-commit -30

With the alias: git lg

Installing the alias: git config --global alias.lg '!git log --pretty=format:\"%C(magenta)%h%Creset -%C(red)%d%Creset %s %C(dim green)(%cr) [%an]\" --abbrev-commit -30'

Create a new branch with the latest main

Use case: Starting a new feature branch and you want to make sure you have the latest changes from upstream

Without the alias: git checkout main && git pull && git checkout -b my-branch-name

With the alias: git nb my-branch-name

Installing the alias: git config --global alias.nb '!git checkout main && git pull && git checkout -b'

Open the repository in your web browser

Use case: You want to see the repository's origin in your web browser, for example on Github.

Without the alias: Easiest just to bookmark it

With the alias: git open

Installing the alias: git config --global alias.open '"!$(which xdg-open 2>/dev/null || which open 2>/dev/null || which start 2>/dev/null) $(git config remote.${1:-origin}.url | sed -E \"s#:([^:]+)\\$#/\\\\1#;s#^(ssh://)?[a-z]+@#https://#g;s#\\\\.git\\$##g;s#^([^a-zA-Z]|([a-zA-Z]+[^a-zA-Z:]))#https://\\\\1#g\")"'

Open the pull request URL in your web browser

Use case: Create or view the pull request webpage, for example on Github

Without the alias: Easiest to search on Github

With the alias: git pr

Installing the alias: git config --global alias.pr '"!$(which xdg-open 2>/dev/null || which open 2>/dev/null || which start 2>/dev/null) $(git config remote.${1:-origin}.url | sed -E \"s#:([^:]+)\\$#/\\\\1#;s#^(ssh://)?[a-z]+@#https://#g;s#\\\\.git\\$##g;s#^([^a-zA-Z]|([a-zA-Z]+[^a-zA-Z:]))#https://\\\\1#g;s#\\$#/compare/main...$(git symbolic-ref --short HEAD)#g\")"'

View recently touched branches

Use case: View the list of branches, ordered by newest first

Without the alias: git branch --sort=-committerdate --format="%(committerdate:s hort) %(align:25)%(authorname)%(end) %(refname:short)"

With the alias: git recent or git recent -a to see all recent branches including remote branches

Installing the alias: git config --global alias.recent 'branch --sort=-committerdate --format=\"%(committerdate:short) %(align:25)%(authorname)%(end) %(refname:short)\"'

Undo the last commit

Use case: You committed the wrong thing but haven't pushed yet. You want to undo the commit and put the committed files back in the working set without losing the changes.

Without the alias: git reset --soft HEAD~1

With the alias: git undo

Installing the alias: git config --global alias.undo 'reset --soft HEAD~1'

Limericks

Working From Home

There was an employee from Stow
Who refused to commute in the snow
He opted instead
To stay home in bed
And hope that nobody would know

Composing Limericks

I fail at this poetry art
Each time that I try to take part
Once the end is in sight
It will not come out right
Let's face it, I'm just not that bright

SEO Myth: nofollow can be used on internal links to control link juice.

In 2005 Google announced the rel=nofollow link attribute. They said that using it would make Google ignore the link. Googlebot would not pass PageRank across the link. For search engine ranking purposes, it was like the link wasn't even in the page. The purpose of nofollow would be to mark links that could be spammy such as links in user generated content.

That lead many webmasters to see nofollow as a tool to control link juice on internal links within their own site. The thinking was that adding nofollow to an internal link would cause Google to pass link juice only to the important internal links on the page. It turns out that thinking was misguided.

Continue reading