GIT is the most widely used distributed open-source Version Control System that allows you to track and manage changes made to the files locally on your computer.
However, the tool is so powerful and extensive enough to get lost in all the possible commands it has.
Hence, based on my own experience, here’s a compilation of GIT cheat sheet
which is the most important and commonly used GIT commands for easy reference.
Here, you can download GIT for all platforms.
GIT CHEAT SHEET 📋
CREATE
From existing data,
-
git init
creates new repository in current directory -
git add .
add all latest changes to the next commit
cd ~/projects/myproject
git init
git add .
From existing repo
-
git clone
is used to clone a repositroy from a remote server
git clone ~/existing/repo ~new/repo
git clone you@host:dir/project.git (default protocol is ssh)
Remote repository for existing local data
mkdir repo.git && cd repo.git
git init --bare[--shared=group]
UPDATE
Fetch latest changes from origin
git fetch (this does not merge them)
Pull latest changes from origin
git pull (does a fetch followed by a merge)
Apply a patch that someone sent you
git am -3 patch.mbox (In case of conflict, resolve the conflict and)
git am --resolve
PUBLISH
Commit all local changes
git commit -a
Commit previously staged changes
git commit -m "descriptive message"
Prepare a patch for other developers
git format-patch origin
Push changes to origin
git push [origin][branch]
Make a version or a milestone
git tag <version_name>
BRANCH
Switch to the BRANCH branch
git checkout <BRANCH>
Merge branch B1 into branch B2
git checkout <B2>
git merge <B1>
Create branch based on HEAD
git branch <BRANCH>
Create branch based on another
git checkout <new><base>
Delete a branch
git branch -d <branch>
REVERT
Return to the last committed state
git checkout -f | git reset --hard (you cannot undo a hard reset)
Revert the last commit
git revert HEAD (Creates a new commit)
Revert specific commit
git revert $id (Creates a new commit)
Fix the last commit
git commit -a --amend (after editing the broken files)
Checkout the ID version of a file
git checkout <ID><file>
SHOW
Files changed in working directory
git status
Changes to tracked files
git diff
Changes between ID1 and ID2
git diff <ID1><ID2>
History of changes
git log
History of changes with files changed
git whatchanged
Who changed what and when in a file
git blame <file>
A commit identifies by ID
git show <ID>
A specific file from a specific ID
git diff <ID>:<file>
All local branches
git branch (star "*" marks the current branch)
Search for patterns
git grep<pattern>[path]
Here,
- master is the default development branch
- origin is the default upstream repository
- HEAD is the current branch
That's it from me today. I hope this cheat sheet helps you with some of the problems you may encounter along the way.
Certainly, it does not cover all the things, but it’s a good article to begin with.
Thanks for reading and let me know about your favorite Git commands in response to this article and share it with your friends and colleagues.
Top comments (16)
Another command I would add is Git Rebase:
Which would apply all the changes in
master
, below your branch, to make your commits grouped together and more organized.Also, I use this quite a lot:
Which runs your rebase in interactive mode for the most recent 2 commits (which is really helpful for squashing and renaming your commits), making it more readable.
In practice I have noticed more problems arise when using
rebase
. These problems come up when you work as a team in a branch or have merged other branches (and solved conflicts).We now have the policy that you are only allowed to rebase if the code has not been pushed to the remote. We also prevent
push --force
which is required for most rebases.Hey, jhtong
Thanks for letting me know about these commands. Will surely make use of it. Appreciate your help man👍
nice
also you need to add
when you want to keep your working progress without commit then you need to switch to other branch
and
to put their back to your file
i think this is important if you work with some branch
I often use git stash save -m "name" instead as I can give the stash a name for easier identification later on
It's deprecated and it's recommended to use
git stash push -m
insteadHey, Aris
Thanks for highlighting the above helpful commands. Will surely make use of it 👍
Nice cheatsheet!
For git status you say
Files changed in working directory
, I think it's wrong, git status gives you the status of the current branch and the files of the whole repo, not just the working directory! For working directory status, you'd dogit status .
Also checkout the subcommand
git worktree
(and its various options), I use it a lot to check something in another branch, review whole branches for a pr of someone else, or other cases. It allows me to have 2+ branches checked out at the same time, sharing the history graph!git am -3 patch.mbox (In case of conflict, resolve the conflict and)
git am --resolve
can you elaborate these?
Hey Amir,
Here, I've tried to elaborate your question,
git am - Apply a series of patches from a mailbox.
git am -3 patch : By default the command will try to detect the patch format automatically. This option allows the user to bypass the automatic detection and specify the patch format that the patch(es) should be interpreted as. Valid formats are mbox, mboxrd, stgit, stgit-series and hg.
( the -3 will do a three-way merge if there are conflicts )
git am --resolve : When a patch failure occurs, will be printed to the screen before exiting. This overrides the standard message informing you to use --continue or --skip to handle the failure. This is solely for internal use between git rebase and git am.
I hope this will help you !!!
I often use git branch --merged to identify branches that I can delete as I have already merged them. Same goes for --no-merged to find out if I've forgotten to merge some features.
Awesome !!! 👌🙌
This is very nice. I made a PDF out of this page
I'm glad that you found this helpful.😃
I think 'git switch' is now more in favor than 'git checkout'? I use that to mainly switch between branches.