====== Slydders GIT cheatsheet ======
Here it is. The cheatsheet I always find handy when dealing with GIT.
===== setup the remote repository =====
chuck@Vacant [master] ~/Projects/splinked$ ssh git@example.com
chuck@Vacant [master] ~/Projects/splinked$ mkdir my_project.git
chuck@Vacant [master] ~/Projects/splinked$ cd my_project.git
chuck@Vacant [master] ~/Projects/splinked$ git init --bare
chuck@Vacant [master] ~/Projects/splinked$ git-update-server-info
chuck@Vacant [master] ~/Projects/splinked$ exit
===== On local machine =====
chuck@Vacant [master] ~/Projects/splinked$ cd my_project
chuck@Vacant [master] ~/Projects/splinked$ git init
chuck@Vacant [master] ~/Projects/splinked$ git add *
chuck@Vacant [master] ~/Projects/splinked$ git commit -m "My initial commit message"
chuck@Vacant [master] ~/Projects/splinked$ git remote add origin git@example.com:my_project.git
chuck@Vacant [master] ~/Projects/splinked$ git push -u origin master
===== Checkout from Subversion =====
1. cd /path/to/git/localrepo
2. svn mkdir --parents protocol:///path/to/repo/PROJECT/trunk -m "Importing git repo"
3. git svn init protocol:///path/to/repo/PROJECT -s
4. git svn fetch
5. git rebase trunk
5.1. git status
5.2. git add (conflicted-files)
5.3. git rebase --continue
5.4. (repeat 5.1.)
6. git svn dcommit
===== Hard Reset =====
When applying/popping a stash and everything just decides to dump on you then you may have no other option:
git reset --hard
===== .bashrc entries =====
Have your terminal prompt display what branch you are currently on in red.
function parse_git_branch_and_add_brackets {
git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\ \[\1\]/'
}
PS1="\[\e]0;\w\a\]\n\[\e[32m\]\u@\h\[\033[0;31m\]\$(parse_git_branch_and_add_brackets) \[\e[33m\]\w\[\e[0m\]\$ "
Generates a prompt such as:
chuck@Vacant [master] ~/Projects/splinked$ cd ..
chuck@Vacant ~/Projects/splinked$
===== git aliases =====
# aliases for common git commands
alias g='git'
alias st='git status'
alias push='git push'
alias commit='git commit'
alias log='git log'
alias stash='git stash'
alias checkout='git checkout'
alias branch='git branch'
alias fetch='git fetch'
alias merge='git merge'
alias cherry-pick='git cherry-pick'
alias rebase='git rebase'
# 'git pull --rebase' with a short log of the latest changes
pull () { local HEADHASH=`git describe --always --abbrev=40`; git pull --rebase $*; echo; PAGER='cat -B' git log --format="%C(yellow)%h %C(green)%an%C(reset): %s" $HEADHASH.. | sed -nr 's/([^:]+)\:/\1\t/;p'; }
# 'git pull --ff-only' with a short log of the latest changes
ff () { local HEADHASH=`git describe --always --abbrev=40`; git pull --ff-only $*; echo; PAGER='cat -B' git log --format="%C(yellow)%h %C(green)%an%C(reset): %s" $HEADHASH.. | sed -nr 's/([^:]+)\:/\1\t/;p'; }
# verbose add
add () { git add -v $*; git status; }
# verbose reset
reset () { git reset $*; git status; }
# 'git add' with 'git ls-files' and grep
# usage like grep - example: gadd 'readme.txt'
gadd () { git ls-files -co --exclude-standard | grep $* | xargs git add -v; git status; }
# 'git reset' with 'git ls-files' and grep
greset () { git ls-files | grep $* | xargs git reset; git status; }
# Enable auto-completion for aliased 'git' command
complete -o default -o nospace -F _git g
get_git_branch() {
echo `git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'`
}
alias gpull='git pull origin `get_git_branch`'
alias gpush='git push origin `get_git_branch`'
===== Removing files/directories directly from the SVN server =====
chuck@Vacant [master] ~/Projects/splinked$ cd ..
chuck@Vacant ~/Projects/splinked$