# show config options
git config --list # show all
git config --global --list # show only global
git config --local --list # show only local
# --global option impacts options at a global level
# --local option impacts options at a local level (.git/config)
# set username/email associated with client
git config --global user.email "joe@example.com"
git config --global user.name "Joe Jaz"
# add color syntax highlighting
git config --global color.status auto
git config --global color.branch auto
# set default pager and editor
git config --global core.editor vim # or set the GIT_EDITOR environment variable
git config --global core.pager less # or set the GIT_PAGER environment variable
# display an option value
git config group.value
git config user.name
Start a new repository and import:
# In the root folder to add to version control:
git init
git init --bare # creates a new repository (with no working copy)
git add . # add everything in directory to repo
git commit -m 'initial commit'
Making commits:
# commit specific files
git commit file1 file2 -m 'comment'
# commit all 'added' files
git commit -a -m 'comment'
# change a commit message
git commit --amend -m 'New Message'
Create new repository by cloning existing one:
git clone --bare . path_or_url_to_git_dir.git
Setting the remote repository (to push and pull from):
git remote add short_name path_or_url_to_git_dir.git
git remote add origin git://github.com/imagescape/iscape-authlog.git
Show remote repositories available:
git remote
git remote -v # show the url
git remote show origin # show detail information about origin
Remove a remote repository:
git remove repo_name
Rename a remote repository:
git rename old_repo_name new_repo_name
Push and Pull from remote repository:
git push origin # push recent commits to remote repository called "origin"
git pull origin # pull updates from origin
Revert changes in working copy:
git clean -n
git clean --dry-run
Show file differences:
git diff # show differences between working copy and any files staged for commit
git diff --staged # compares staged changes with last commit
git diff --cached # same as above for git older than 1.6.1
git difftool -t [meld|kdiff3|vimdiff|etc.] [diff criteria]
git difftool -t meld --staged
git difftool --tool=meld --staged
git difftool origin/master --dir-diff # use difftool to diff entire dir tree
git diff -U999999999 master.. -- file.txt # shows the full file.txt, with diff markup, in the master/branch diff results
git diff --name-status brancha..branchb # shows list of changed files
Show File/s History:
git log filename # Show single file versions
# Show number of lines changed in file/s
git log -stat filename # single file
git log -stat # multiple files
# show log summaries on one line
git log --pretty=oneline # Pre-defined format
git log --pretty=format:"%h - %cD (%an) %s" # custom format (see below)
git log --pretty=format:"%h %s" --graph
git log --graph --full-history --all --color \
--pretty=format:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%s"
Pre-Defined Pretty formats:
oneline
short
medium
full
fuller
email
raw
format:string # where string is
Pre-Defined Pretty formats:
oneline
short
medium
full
fuller
raw
format:string # where string is
Format Strings
%H: commit hash
%h: abbreviated commit hash
%T: tree hash
%t: abbreviated tree hash
%P: parent hashes
%p: abbreviated parent hashes
%an: author name
%aN: author name (respecting .mailmap, see git-shortlog(1) or git-blame(1))
%ae: author email
%aE: author email (respecting .mailmap, see git-shortlog(1) or git-blame(1))
%ad: author date (format respects --date= option)
%aD: author date, RFC2822 style
%ar: author date, relative
%at: author date, UNIX timestamp
%ai: author date, ISO 8601 format
%cn: committer name
%cN: committer name (respecting .mailmap, see git-shortlog(1) or git-blame(1))
%ce: committer email
%cE: committer email (respecting .mailmap, see git-shortlog(1) or git-blame(1))
%cd: committer date
%cD: committer date, RFC2822 style
%cr: committer date, relative
%ct: committer date, UNIX timestamp
%ci: committer date, ISO 8601 format
%d: ref names, like the --decorate option of git-log(1)
%e: encoding
%s: subject
%f: sanitized subject line, suitable for a filename
%b: body
%B: raw body (unwrapped subject and body)
%N: commit notes
%gD: reflog selector, e.g., refs/stash@{1}
%gd: shortened reflog selector, e.g., stash@{1}
%gs: reflog subject
%Cred: switch color to red
%Cgreen: switch color to green
%Cblue: switch color to blue
%Creset: reset color
%C(…): color specification, as described in color.branch.* config option
%m: left, right or boundary mark
%n: newline
%%: a raw %
%x00: print a byte from a hex code
%w([[,[,]]]): switch line wrapping, like the -w option of git-shortlog(1).
Show git branches available:
git branch
Show all branches including remote branches:
git branch -a
Create new branch:
git branch new_branch
Change branches:
git checkout new_branch
Delete branch:
git branch -d new_branch # delete only if all changes are merged
git branch -D new_branch # delete even if there are unmerged changes
Merge branch into current copy:
git merge --no-ff branch_to_merge_in
Resolve a Merge:
1) Edit file to resolve
2) git add conflict_file
3) git commit
Using Mergetool
git mergetool
git mergetool --tool=meld
git mergetool -t meld
Abort a merge conflict before committing:
git merge --abort
Undo a Merge: # restores state to pre-merge
git reset --heard HEAD
Undo a local commit:
git reset --soft HEAD^
Find the commit where two branches diverge:
git merge-base branch1 branch2
http://stackoverflow.com/questions/1549146/find-common-ancestor-of-two-branches
Find what branches were merged into a given branch:
git branch --merged master # local branches only
git branch -a --merged master # local and remote branches
Find what branches were NOT merged into a given branch:
git branch --no-merged master # local branches only
git branch -a --no-merged master # local and remote branches
Find what branches are merged into develop, but not master:
comm -12 <(sort <(git branch -a --no-merged origin/master)) <(sort <(git branch -a --merged origin/develop))
https://stackoverflow.com/questions/8071079/git-list-branches-merged-into-a-branch-but-not-into-another
Copy all branches from origin to new_remote:
git push new_remote refs/remotes/origin/*:refs/heads/*
Get number of commits per author
apt-get install git-extras
%H: commit hash
%h: abbreviated commit hash
%T: tree hash
%t: abbreviated tree hash
%P: parent hashes
%p: abbreviated parent hashes
%an: author name
%aN: author name (respecting .mailmap, see git-shortlog(1) or git-blame(1))
%ae: author email
%aE: author email (respecting .mailmap, see git-shortlog(1) or git-blame(1))
%ad: author date (format respects --date= option)
%aD: author date, RFC2822 style
%ar: author date, relative
%at: author date, UNIX timestamp
%ai: author date, ISO 8601 format
%cn: committer name
%cN: committer name (respecting .mailmap, see git-shortlog(1) or git-blame(1))
%ce: committer email
%cE: committer email (respecting .mailmap, see git-shortlog(1) or git-blame(1))
%cd: committer date
%cD: committer date, RFC2822 style
%cr: committer date, relative
%ct: committer date, UNIX timestamp
%ci: committer date, ISO 8601 format
%d: ref names, like the --decorate option of git-log(1)
%e: encoding
%s: subject
%f: sanitized subject line, suitable for a filename
%b: body
%B: raw body (unwrapped subject and body)
%N: commit notes
%gD: reflog selector, e.g., refs/stash@{1}
%gd: shortened reflog selector, e.g., stash@{1}
%gs: reflog subject
%Cred: switch color to red
%Cgreen: switch color to green
%Cblue: switch color to blue
%Creset: reset color
%C(…): color specification, as described in color.branch.* config option
%m: left, right or boundary mark
%n: newline
%%: a raw %
%x00: print a byte from a hex code
%w([[,[,]]]): switch line wrapping, like the -w option of git-shortlog(1).
Show git branches available:
git branch
Show all branches including remote branches:
git branch -a
Create new branch:
git branch new_branch
Change branches:
git checkout new_branch
Delete branch:
git branch -d new_branch # delete only if all changes are merged
git branch -D new_branch # delete even if there are unmerged changes
Merge branch into current copy:
git merge --no-ff branch_to_merge_in
Resolve a Merge:
1) Edit file to resolve
2) git add conflict_file
3) git commit
Using Mergetool
git mergetool
git mergetool --tool=meld
git mergetool -t meld
Abort a merge conflict before committing:
git merge --abort
Undo a Merge: # restores state to pre-merge
git reset --heard HEAD
Undo a local commit:
git reset --soft HEAD^
Find the commit where two branches diverge:
git merge-base branch1 branch2
http://stackoverflow.com/questions/1549146/find-common-ancestor-of-two-branches
Find what branches were merged into a given branch:
git branch --merged master # local branches only
git branch -a --merged master # local and remote branches
Find what branches were NOT merged into a given branch:
git branch --no-merged master # local branches only
git branch -a --no-merged master # local and remote branches
Find what branches are merged into develop, but not master:
comm -12 <(sort <(git branch -a --no-merged origin/master)) <(sort <(git branch -a --merged origin/develop))
https://stackoverflow.com/questions/8071079/git-list-branches-merged-into-a-branch-but-not-into-another
Copy all branches from origin to new_remote:
git push new_remote refs/remotes/origin/*:refs/heads/*
Get number of commits per author
apt-get install git-extras
git summary -n
References:
http://jonas.nitro.dk/git/quick-reference.html
http://www.vogella.de/articles/Git/article.html#git_stagingindex
http://book.git-scm.com/3_basic_branching_and_merging.html
http://stackoverflow.com/questions/1838873/visualizing-branch-topology-in-git
http://stackoverflow.com/questions/226976/how-can-i-know-in-git-if-a-branch-has-been-already-merged-into-master
http://stackoverflow.com/questions/7818927/git-push-branch-from-one-remote-to-another
References:
http://jonas.nitro.dk/git/quick-reference.html
http://www.vogella.de/articles/Git/article.html#git_stagingindex
http://book.git-scm.com/3_basic_branching_and_merging.html
http://stackoverflow.com/questions/1838873/visualizing-branch-topology-in-git
http://stackoverflow.com/questions/226976/how-can-i-know-in-git-if-a-branch-has-been-already-merged-into-master
http://stackoverflow.com/questions/7818927/git-push-branch-from-one-remote-to-another