1. fournova
git cheat sheet
presented by
Tower – the most powerful Git client for Mac
Create Branches & Tags Merge & Rebase
Clone an existing repository List all existing branches Merge branch into your current HEAD
$ git clone ssh://user@domain.com/repo.git $ git branch $ git merge branch
Create a new local repository Switch HEAD branch Rebase your current HEAD onto branch
$ git init $ git checkout branch Don‘t rebase published commits!
$ git rebase branch
Create a new branch based on your
local Changes current HEAD Abort a rebase
$ git branch new-branch $ git rebase --abort
Changed files in your working directory
$ git status Create a new tracking branch based on Continue a rebase after resolving conflicts
a remote branch $ git rebase --continue
Changes to tracked files
$ git branch --track new-branch
$ git diff remote-branch Use your configured merge tool to
solve conflicts
Add all current changes to the next Delete a local branch
commit $ git mergetool
$ git branch -d branch
$ git add . Use your editor to manually solve con-
Mark the current commit with a tag flicts and (after resolving) mark file as
Add some changes in file to the next resolved
commit $ git tag tag-name
$ git add resolved-file
$ git add -p file
Update Publish $ git rm resolved-file
Commit all local changes in tracked files
$ git commit -a List all currently configured remotes Undo
$ git remote -v
Commit previously staged changes Discard all local changes in your working
$ git commit Show information about a remote directory
$ git remote show remote $ git reset --hard HEAD
Change the last commit
Don‘t amend published commits! Add new remote repository, named Discard local changes in a specific file
$ git commit --amend remote $ git checkout HEAD file
$ git remote add remote url
Revert a commit (by producing a new
Download all changes from remote, commit with contrary changes)
Commit History but don‘t integrate into HEAD $ git revert commit
$ git fetch remote
Show all commits, starting with newest Reset your HEAD pointer to a previous
$ git log Download changes and directly merge/ commit
integrate into HEAD …and discard all changes since then
Show changes over time for a specific file $ git pull remote branch
$ git log -p file $ git reset --hard commit
Publish local changes on a remote …and preserve all changes as unstaged
Who changed what and when in file $ git push remote branch changes
$ git blame file
Delete a branch on the remote $ git reset commit
$ git push remote :branch …and preserve uncommitted local
changes
Publish your tags
$ git reset --keep commit
$ git push --tags
30-day free trial available at
www.git-tower.com the most powerful Git client for Mac
2. fournova
version control
best practices
Commit Related Changes Test Code Before You Commit Use Branches
A commit should be a wrapper for related Resist the temptation to commit some- Branching is one of Git‘s most powerful
changes. For example, fixing two diffe- thing that you «think» is completed. Test features - and this is not by accident:
rent bugs should produce two separate it thoroughly to make sure it really is quick and easy branching was a central
commits. Small commits make it easier completed and has no side effects (as far requirement from day one. Branches are
for other developers to understand the as one can tell). While committing half- the perfect tool to help you avoid mixing
changes and roll them back if something baked things in your local repository only up different lines of development. You
went wrong. requires you to forgive yourself, having should use branches extensively in your
With tools like the staging area and the your code tested is even more important development workflows: for new fea-
ability to stage only parts of a file, Git when it comes to pushing/sharing your tures, bug fixes, ideas…
makes it easy to create very granular code with others.
commits.
Commit Often Write Good Commit Messages Agree on a Workflow
Committing often keeps your commits Begin your message with a short sum- Git lets you pick from a lot of different
small and, again, helps you commit only mary of your changes (up to 50 charac- workflows: long-running branches, topic
related changes. Moreover, it allows you ters as a guideline). Separate it from branches, merge or rebase, git-flow…
to share your code more frequently with the following body by including a blank Which one you choose depends on a
others. That way it‘s easier for everyone line. The body of your message should couple of factors: your project, your
to integrate changes regularly and avoid provide detailed answers to the following overall development and deployment
having merge conflicts. Having few large questions: workflows and (maybe most important-
commits and sharing them rarely, in con- – hat was the motivation for the change?
W ly) on your and your teammates‘ personal
trast, makes it hard to solve conflicts. – ow does it differ from the previous
H preferences. However you choose to
implementation? work, just make sure to agree on a com-
mon workflow that everyone follows.
Use the imperative, present tense
(«change», not «changed» or «changes»)
Don‘t Commit Half-Done Work
to be consistent with generated messa-
You should only commit code when ges from commands like git merge. Help Documentation
it‘s completed. This doesn‘t mean you
have to complete a whole, large feature Get help on the command line
before committing. Quite the contrary: $ git help command
split the feature‘s implementation into Version Control is not
a Backup System
logical chunks and remember to commit
early and often. But don‘t commit just to Having your files backed up on a remote Official Git Website
have something in the repository before server is a nice side effect of having a
leaving the office at the end of the day. If http://www.git-scm.com/
version control system. But you should
you‘re tempted to commit just because not use your VCS like it was a backup Free online resources
you need a clean working copy (to check system. When doing version control, you http://progit.org
out a branch, pull in changes, etc.) consi- should pay attention to committing se- http://book.git-scm.org
der using Git‘s «Stash» feature instead. mantically (see «related changes») - you
http://gitref.org
shouldn‘t just cram in files.
30-day free trial available at
www.git-tower.com the most powerful Git client for Mac