Try   HackMD

GitOps - Customized Git

Normal git logs commands will output a full log detail to the console:

Often developers want to see compacted, colorized log outputs. To generate the compact logs, use a custom git lg command.

Developers should create a git alias in their git configuration file:

~/.gitconfig

[alias]
  plog = log --color --graph --pretty=format:'%C(red)%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

Developers can also specify a bash command glog for the Terminal:

~/.bashrc

function glog() {
  git plog
}

Then in the terminal window, just type log to see the compacted git log output:





Customized Terminal Prompt

To easily navigate your Git repositories from the terminal, let's modify the standard terminal prompt to show:

  • the Git branch, if the current working directory is a git repository
  • use a red color-code for the branch name, if the repo contains uncommitted changes
Before

After



Simply modify your Bash settings within the configuration bashrc:

Terminal Customizations

File: ~/.bashrc
# Text color variables
txtUnd=$(tput sgr 0 1) # Underline
txtBold=$(tput bold) # Bold
bldred=${txtBold}$(tput setaf 1) # red
bldblue=${txtBold}$(tput setaf 4) # blue
bldwhite=${txtBold}$(tput setaf 7) # white
txtReset=$(tput sgr0) # Reset
c_red=`tput setaf 1`
c_green=`tput setaf 2`
c_yellow=`tput setaf 3`
c_blue=`tput setaf 4`
c_purple=`tput setaf 5`
c_cyan=`tput setaf 6`
c_white=`tput setaf 7`

# Determine branch name if CWD is part of a git repository
parse_git_branch ()
{
if git rev-parse --git-dir >/dev/null 2>&1
then
  gitver=$(git branch 2>/dev/null| sed -n '/^\*/s/^\* //p')
else
  return 0
fi
echo -e $gitver
}

# Highlight branch name in `red` color if the repo contains uncommitted changes
branch_color ()
{
if git rev-parse --git-dir >/dev/null 2>&1
then
  color=""
if git diff --quiet 2>/dev/null >&2
then
  color="${c_green}"
else
  color=${c_red}
fi
else
return 0
fi
echo -ne $color
}

# Update command prompt to show `<cwd> [<git branch name>]`
PS1='\[${c_green}\]\W\[${txtReset}\] [\[$(branch_color)\]$(parse_git_branch)\[${txtReset}\]]: '

function cls() {
 clear
}

# Silently amend all changes to the HEAD commit; without message changes

function branches() {
 git branch --list --column
}


function amend() {
 git add -A && git commit --amend --no-edit
}

function rebase() {
if 
  $1 
then 
  git pull --rebase origin $1
else 
  git pull --rebase origin master
fi
}

function fetch() {
 git fetch --all --tag
}

function commit() {
if 
  $1
then 
  git add . && git commit -am "$1"
else 
  return 0
fi
}

function log() {
  git plog $1
}

alias ls='ls -la'
alias cls='clear'
alias g='git '
alias npm-exec='PATH=$(npm bin):$PATH'

alias gl='git log --color --graph --pretty=format:"%C(red)%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset" --abbrev-commit'
alias gf='git fetch'
alias gco='git checkout $@'
alias gst='git status -s'
alias gcp='git cherry-pick'
alias gcm='git checkout master'
alias gcd='git checkout develop'
alias ga='git add .'
alias gfp='git push --force-with-lease origin $1'
alias gprd='git pull --rebase origin master'
alias gca='git commit -a'

# @see https://haacked.com/archive/2014/07/28/github-flow-aliases/

alias rebase-i='git rebase -i HEAD~$@'
alias abort='git rebase --abort'
alias continue='git add . && git rebase --continue'

alias amend='git add . && git commit --amend --no-edit'
alias commit='git add . && git commit -m $@'

alias save='git add -A && git commit -m "SAVEPOINT"'
alias undo='git reset HEAD~1 --mixed'
alias wipe="git add -A && git commit -qm 'WIPE SAVEPOINT' && git reset HEAD~1 --hard"

Don't forget to run source ~/.bashrc so you can see these changes in your terminal.

File: ~/.gitconfig


GitConfig

And update your global gitConfig settings with improved 'aliases'.

plog is the most important!

[alias] plog = !git log --color --graph --pretty=format:\"%C(red)%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset\" --abbrev-commit recent = !git for-each-ref --sort=-committerdate refs/heads --format='%(HEAD)%(color:yellow)%(refname:short)|%(color:bold green)%(committerdate:relative)|%(color:blue)%(subject)|%(color:magenta)%(authorname)%(color:reset)' --color=always | column -ts'|' wipe = !git add -A && git commit -qm 'WIPE SAVEPOINT' && git reset HEAD~1 --hard f = fetch co = checkout st = status -s cp = cherry-pick cm = checkout master ri = rebase -i cam = commit --amend a = add . pf = push --force-with-lease orign $(current_branch) prm = pull --rebase origin master pr = pull --rebase ca = commit -a pom = push origin master pog = push origin gh-pages prb = "git fetch -f origin refs/pull/$1/head:pr/$1" pr = "!f(){ git fetch -fu ${2:-origin} refs/pull/$1/head:pr/$1 && git checkout pr/$1; }; f" pr-clean = "!f() { git checkout master; git for-each-ref refs/heads/pr/* --format='%(refname)' | while read ref; do branch=${ref#refs/heads/}; git branch -D $branch; done; }; f" pr-upstream = '!f() { git fetch -fu ${2:-upstream} refs/pull/$1/head:pr/$1 && git checkout pr/$1; }; f' fp = push --force-with-lease origin