A Cheat Sheet For GIT
A Cheat Sheet For GIT
iansheridan / git-cheat-sheet.md
Created 11 years ago • Report abuse
Star
git-cheat-sheet.md
Setup
clone the repository specified by ; this is similar to "checkout" in some other version
control systems such as Subversion and CVS
[color]
ui = auto
[color "branch"]
current = yellow reverse
local = yellow
remote = green
[color "diff"]
meta = yellow bold
frag = magenta bold
old = red bold
new = green bold
[color "status"]
added = green
changed = yellow
untracked = red
[color]
ui = true
[color "diff"]
whitespace = red reverse
https://gist.github.com/iansheridan/870778 1/16
4/13/22, 5:04 PM A cheat sheet for GIT
[core]
whitespace=fix,-indent-with-non-tab,trailing-space,cr-at-eol
[alias]
st = status
ci = commit
br = branch
co = checkout
df = diff
lg = log -p
lol = log --graph --pretty=format:'%C(yellow)%h%Creset %an: %s - %Creset
%C(yellow)%d%Creset %Cblue(%cr)%Creset' --abbrev-commit --date=relative
lola = log --graph --pretty=format:'%C(yellow)%h%Creset %an: %s - %Creset
%C(yellow)%d%Creset %Cblue(%cr)%Creset' --abbrev-commit --date=relative --all
ls = ls-files
Configuration
tells git-branch and git-checkout to setup new branches so that git-pull(1) will
appropriately merge from that remote branch. Recommended. Without this, you will
have to add --track to your branch command or manually merge remote tracking
branches with "fetch" and then "merge".
This setting tells git to convert the newlines to the system’s standard when checking
out files, and to LF newlines when committing in
https://gist.github.com/iansheridan/870778 2/16
4/13/22, 5:04 PM A cheat sheet for GIT
You can add "--global" after "git config" to any of these commands to make it apply to
all git repos (writes to ~/.gitconfig).
Info
git reflog
Use this to recover from major fuck ups! It's basically a log of the last few actions and
you might have luck and find old commits that have been lost by doing a complex
merge.
git diff
show a diff of the changes made since your last commit to diff one file: "git diff -- " to
show a diff between staging area and HEAD: git diff --cached
git status
show files added to the staging area, files with changes, and untracked files
git log
show recent commits, most recent on top. Useful options: --color with color --graph
with an ASCII-art commit graph on the left --decorate with branch and tag names on
appropriate commits --stat with stats (files changed, insertions, and deletions) -p with
full diffs --author=foo only by a certain author --after="MMM DD YYYY" ex. ("Jun 20
2008") only commits after a certain date --before="MMM DD YYYY" only commits that
occur before a certain date --merge only the commits involved in the current merge
conflicts
show commits between the specified range. Useful for seeing changes from remotes:
git log HEAD..origin/master # after git remote update
show the changeset (diff) of a commit specified by , which can be any SHA1 commit ID,
branch name, or tag (shows the last commit (HEAD) by default)
https://gist.github.com/iansheridan/870778 3/16
4/13/22, 5:04 PM A cheat sheet for GIT
show only the names of the files that changed, no diff information.
show only the commits which affected listing the most recent first E.g. view all changes
made to a file on a branch:
git whatchanged | grep commit | \
colrm 1 7 | xargs -I % git show % this could be combined with git remote show to find
all changes on all branches to a particular file.
show the diff between a file on the current branch and potentially another branch
use this form when doing git diff on cherry-pick'ed (but not committed) changes
somehow changes are not shown when using just git diff.
git ls-files
https://gist.github.com/iansheridan/870778 4/16
4/13/22, 5:04 PM A cheat sheet for GIT
show the current version on the remote repo. This can be used to check whether a local
is required by comparing the local head revision.
Adding / Deleting
git add .
add all files under the current directory to the project WARNING: including untracked
files.
Ignoring
Option 1:
Option 2:
https://gist.github.com/iansheridan/870778 5/16
4/13/22, 5:04 PM A cheat sheet for GIT
Add a file .gitignore to the root of your project. This file will be checked in.
Staging
add changes in , ... to the staging area (to be included in the next commit
git add -p
git stage --patch
interactively walk through the current changes (hunks) in the working tree, and decide
which changes to add to the staging area.
git add -i
git stage --interactive
interactively add files/changes to the staging area. For a simpler mode (no menu), try
git add --patch (above)
Unstaging
Committing
commit , , etc..., optionally using commit message , otherwise opening your editor to let
you type a commit message
git commit -a
commit all files changed since your last commit (does not include new (untracked) files)
https://gist.github.com/iansheridan/870778 6/16
4/13/22, 5:04 PM A cheat sheet for GIT
git commit -v
commit verbosely, i.e. includes the diff of the contents being committed in the commit
message screen
Branching
git branch
git branch -r
git branch -a
create a new branch named , referencing the same point in history as the current
branch
create a new branch named , referencing , which may be specified any way you like,
including using a branch name or a tag name
https://gist.github.com/iansheridan/870778 7/16
4/13/22, 5:04 PM A cheat sheet for GIT
create a tracking branch. Will push/pull changes to/from another repository. Example:
git branch --track experimental origin/experimental
delete the branch ; if the branch you are deleting points to a commit which is not
reachable from the current branch, this command will fail with a warning.
even if the branch points to a commit not reachable from the current branch, you may
know that that commit is still reachable from some other branch or tag. In that case it is
safe to use this command to force git to delete the branch.
make the current branch , updating the working directory to reflect the version
referenced by
https://gist.github.com/iansheridan/870778 8/16
4/13/22, 5:04 PM A cheat sheet for GIT
Checkout a file from another branch and add it to this branch. File will still need to be
added to the git branch, but it's present.
Eg. git co remote_at_origin__tick702_antifraud_blocking
..../...nt_elements_for_iframe_blocked_page.rb
Show the contents of a file at the specific revision. Note: path has to be absolute within
the repo.
Merging
merge branch into the current branch; this command is idempotent and can be run as
many times as needed to keep the current branch up-to-date with changes in
merge branch into the current branch, but do not autocommit the result; allows you to
make further tweaks
merge branch into the current branch, but drops any changes in , using the current tree
as the new tree
Cherry-Picking
https://gist.github.com/iansheridan/870778 9/16
4/13/22, 5:04 PM A cheat sheet for GIT
Squashing
WARNING: "git rebase" changes history. Be careful. Google it.
(then change all but the first "pick" to "squash") squash the last 10 commits into one
big commit
Conflicts
git mergetool
work through conflicted files by opening them in your mergetool (opendiff, kdiff3, etc.)
and choosing left/right chunks. The merged result is staged for commit.
For binary files or if mergetool won't do, resolve the conflict(s) manually and then do:
Once all conflicts are resolved and staged, commit the pending merge with:
git commit
Sharing
update the remote-tracking branches for (defaults to "origin"). Does not initiate a
merge into the current branch (see "git pull" below).
git pull
fetch changes from the server, and merge them into the current branch. Note:
.git/config must have a [branch "some_name"] section for the current branch, to know
which remote-tracking branch to merge into the current branch. Git 1.5.3 and above
adds this automatically.
https://gist.github.com/iansheridan/870778 10/16
4/13/22, 5:04 PM A cheat sheet for GIT
git push
update the server with your commits across all branches that are COMMON between
your local copy and the server. Local branches that were never pushed to the server in
the first place are not shared.
update the server with your commits made to since your last push. This is always
required for new branches that you wish to share. After the first explicit push, "git push"
by itself is sufficient.
Reverting
reverse commit specified by and commit the result. This does not do the same thing as
similarly named commands in other VCS's such as "svn revert" or "bzr revert", see below
git checkout .
re-checkout all files, overwriting any local changes. This is most similar to "svn revert" if
you're used to Subversion commands
https://gist.github.com/iansheridan/870778 11/16
4/13/22, 5:04 PM A cheat sheet for GIT
abandon everything since your last commit; this command can be DANGEROUS. If
merging has resulted in conflicts and you'd like to just forget about the merge, this
command will do that.
undo your most recent successful merge and any changes that occurred after. Useful for
forgetting about the merge you just did. If there are conflicts (the merge was not
successful), use "git reset --hard" (above) instead.
forgot something in your last commit? That's easy to fix. Undo your last commit, but
keep the changes in the staging area for editing.
redo previous commit, including changes you've staged in the meantime. Also used to
edit commit message of previous commit.
Plumbing
test = $(git merge-base )
determine if merging sha1-B into sha1-A is achievable as a fast forward; non-zero exit
status is false.
Stashing
git stash
git stash save <optional-name>
save your local modifications to a new stash (so you can for example "git svn rebase" or
"git pull")
restore the changes recorded in the stash on top of the current working tree state
https://gist.github.com/iansheridan/870778 12/16
4/13/22, 5:04 PM A cheat sheet for GIT
restore the changes from the most recent stash, and remove it from the stack of
stashed changes
Remotes
adds a remote repository to your git config. Can be then fetched locally. Example:
https://gist.github.com/iansheridan/870778 13/16
4/13/22, 5:04 PM A cheat sheet for GIT
For branches that are remotely tracked (via git push) but that complain about non-fast
forward commits when doing a git push. The pull synchronizes local and remote, and if
all goes well, the result is pushable.
Submodules
add the given repository at the given path. The addition will be part of the next commit.
Update the registered submodules (clone missing submodules, and checkout the
commit specified by the super-repo). --init is needed the first time.
https://gist.github.com/iansheridan/870778 14/16
4/13/22, 5:04 PM A cheat sheet for GIT
Remove submodules
Patches
Generate the last commit as a patch that can be applied on another clone (or branch)
using 'git am'. Format patch can also generate a patch for all commits using 'git format-
patch HEAD^ HEAD'
All page files will be enumerated with a prefix, e.g. 0001 is the first patch.
Git Instaweb
Environment Variables
GIT_AUTHOR_NAME, GIT_COMMITTER_NAME
https://gist.github.com/iansheridan/870778 15/16
4/13/22, 5:04 PM A cheat sheet for GIT
Your full name to be recorded in any newly created commits. Overrides user.name in
.git/config
GIT_AUTHOR_EMAIL, GIT_COMMITTER_EMAIL
Your email address to be recorded in any newly created commits. Overrides user.email
in .git/config
GIT_DIR
GIT_WORKING_TREE
Location of the Working Directory - use with GIT_DIR to specifiy the working directory
root or to work without being in the working directory at all.
https://gist.github.com/iansheridan/870778 16/16