Skip to content
Guilherme Trein edited this page May 15, 2014 · 4 revisions

Git Tips

Properly Configure your ~/.gitconfig

  • Properly configure your user information GitHub tracks your changes by using the information provided by your ~/.gitconfig. If you work on more than one machine and your ~/.gitconfig is not properly configured, you will probably end up with duplicated commits and disorganized history. Here are the lines you will have to modify according to your GitHub credentials.
[user]
	name = Guilherme M. Trein
	email = valid@email.com
  • Properly configure your difftool and mergetool. The difftool and mergetool are the software Git will execute during diff or conflict resolution operations respectively.
[difftool "opendiff"]
	cmd = /usr/bin/opendiff \"$LOCAL\" \"$REMOTE\" -merge \"$MERGED\" | cat
[diff]
	tool = opendiff
[merge]
	tool = opendiff
  • Create aliases for the most common used commands. You will noticed that you will end up issuing the same Git command several times a day. Creating aliases to the most common used commands can save precious minutes every day.
[alias]
	st = status
	ci = commit
	br = branch
	co = checkout
	ds = diff --staged
	changes = log -n1 -p --format=fuller
	amend = commit --amend -C HEAD
	undo = clean -f -d
	undoci = reset HEAD~1
	unstage = reset HEAD --
	lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
	ls = log --pretty=format:\"%C(yellow)%h %C(blue)%ad%C(red)%d %C(reset)%s%C(green) [%cn]\" --decorate --date=short
	lg-full = log --name-status --pretty=fuller

Cheat Sheet

Create

Operation Command
Clone an existing repository $ git clone ssh://user@domain.com/repo.git
Create a new local repository $ git init

Local Changes

Operation Command
Changed files in your working directory $ git status
Changes to tracked files $ git diff
Add all current changes to the next commit $ git add .
Add some changes in to the next commit $ git add -p <file>
Commit all local changes in tracked files $ git commit -a
Commit previously staged changes $ git commit
Change the last commit (Don‘t amend published commits!) $ git commit --amend

Commit History

Operation Command
Show all commits, starting with newest $ git log
Show changes over time for a specific file $ git log -p <file>
Who changed what and when in $ git blame <file>

Branches and Tags

Operation Command
List all existing branches $ git branch
Switch HEAD branch $ git checkout <branch>
Create a new branch based on your current HEAD $ git branch <new-branch>
Create a new tracking branch based on a remote branch $ git checkout --track <remote/branch>
Delete a local branch $ git branch -d <branch>
Mark the current commit with a tag $ git tag <tag-name>

Update and Publish

Operation Command
List all currently configured remotes $ git remote -v
Show information about a remote $ git remote show <remote>
Add new remote repository, named $ git remote add <remote> <url>
Download all changes from , but don‘t integrate into HEAD $ git fetch <remote>
Download changes and directly merge/ integrate into HEAD $ git pull <remote> <branch>
Publish local changes on a remote $ git push <remote> <branch>
Delete a branch on the remote $ git branch -dr <remote/branch>
Publish your tags $ git push --tags

Merge and Rebase

Operation Command
Merge into your current HEAD $ git merge <branch>
Rebase your current HEAD onto (Don‘t rebase published commits!) $ git rebase <branch>
Abort a rebase $ git rebase --abort
Continue a rebase after resolving conflicts $ git rebase --continue
Use your configured merge tool to solve conflicts $ git mergetool
Use your editor to manually solve con- flicts and (after resolving) mark file as resolved $ git add <resolved-file> $ git rm <resolved-file>

Undo

Operation Command
Discard all local changes in your working directory $ git reset --hard HEAD
Discard local changes in a specific file $ git checkout HEAD <file>
Revert a commit (by producing a new commit with contrary changes) $ git revert <commit>
Reset your HEAD pointer to a previous commit and discard all changes since then $ git reset --hard <commit>
Reset your HEAD pointer to a previous commit and preserve all changes as unstaged changes $ git reset <commit>
Reset your HEAD pointer to a previous commit and preserve uncommitted local changes $ git reset --keep <commit>