Skip to content

Instantly share code, notes, and snippets.



Last active May 2, 2021
What would you like to do?
Git Command Line Reference - Notes, Cheatsheet and reminders on Git set up and commands
* Set up your Git configuration
git config --global ""
git config --global "Your Name"
git config --global core.editor "nano"
git config --global color.ui true
*See Git configuration
git config --list
* To initialise a local repository
git init
* Add a file to the repo
git add <filename>
* Add all the files to the repo
git add .
* Commit the change to git
git commit -m "Message about the change goes here" <filename>
* Commit all changes to git of muliple files - no filenames needed
git commit -am "Message about the change goes here"
* See the commits in a historical linear fashion
git log
* Git has a 3 Tier Architecture: Working - Staging - Repo
* Changes to files are put in a Checksum SHA-1 hash 40digit value containing parent hash, author and message.
* HEAD is the latest commit of the checked out branch
* Basic Commands
git status /* the command 'git status' tells which files are not added or committed from Working to Staging to Repository */
git commit -m "" /* Commits and changes to all files that are in Staging into Repo */
git diff /* show changes between Working and Local Repo, no file supplied shows all files */
git diff --staged /* shows changes between Staged and Local Repo */
git rm file.txt /* will remove file from working then git commit -m "" to also remove from Repo */
git rm --cached file.txt /* leaves copy of file in Working but removes from Staging and Repo */
git mv /* rename or move files - then git commit -m "" to move to Repo */
git commit -am "text goes here" /* adds all files straight to Repo from Staging if they have changes - meaning they skip git add */
git checkout -- file.txt /* restore Repo file to Working Directory using current branch */
git reset --soft HEAD^ /* restore repo file to staging */
git reset HEAD file.txt /* Move a Stage file out of Stage back to Working */
git commit --amend -m "message" file.txt /* Change last commit to Repo (only last one can change) */
/* Reverting --soft --mixed --hard will go back to previous commits*/
git log /* gets the sha1s so you can see the coomits where you want revert back to */
git reset --soft sha /* changes Repo but not Staging or Working */
git reset --mixed sha /* changes Repo and Staging but not Working */
git reset --hard sha /* changes all 3 Tiers */
git clean -f /* remove untracked files from Working */
.gitignore /* ignores files to track in Working / track the .gitignore file */
Global Ignore /* create in home folder */
/* Add in */
git config --global core.excludesfile ~/.gitignore_global /* add to gitconfig */
/* Stop tracking changes */
git rm --cached file.txt /* leaves copy in Repo and Working */
/* Track Folders changes
Add an invisble file to a folder like .gitkeeper then add and commit */
/* Commit Log */
git ls-tree HEAD
git ls-tree master
git log --oneline
git log --author="Neil"
git log --grep="temp"
/* Show Commits */
git show dc094cb /* show SHA1 */
/* Compare Commits */
/* Branches */
git branch /* Show local branch name - the asterisk * is the one we are on */
git branch -r /* Shows remote branches */
git branch -a /* Shows local and remote */
git branch newbranch /* creates a new branch */
git checkout newbranch /* switch to new branch */
git checkout -b oldbranch /* creates and switches to new branch */
git push origin newbranch /* Push new branch to remote */
/* Diff in Branches */
git diff master..otherbranch /* shows diff */
git diff --color-words master..otherbranch /* shows diff in color */
git branch --merged /* shows any merged branches */
/* Rename Branch */
git branch -m oldname newname
/* Delete Branch */
git branch -d nameofbranch
/* Merge Branch */
git merge branchname /* be on the receiver branch to merge the other branch */
/* Merge Conflicts between the same file on 2 branches are marked in HEAD and other branch */
git merge --abort /* Abort basically cancels the merge */
/* Manually Fix Files and commit
The Stash */
git stash save "text message here"
git stash list /* shows whats in stash */
git stash show -p stash@{0} /* Show the diff in the stash */
git stash pop stash@{0} /* restores the stash deletes the tash */
git stash apply stash@{0} /* restores the stash and keeps the stash */
git stash clear /* removes all stash */
git stash drop stash@{0}
* Remotes
* You can push and fetch to the remote server, merge any differences - then push any new to the remote - 3 branches work remote server branch, local origin master and local master
* Create a repo in GitHub, then add that remote to your local repo
* You will need to add a SSH key from your local machine and store it in GitHub - ref:
git remote add origin /* origin can be named whatever followed by the remote */
git remote /* to show all remotes */
git remote show origin /*to see remote URL*/
git remote remove origin /* to remove remote */
git remote rm origin /* to remove remote */
/* Push to Remote from Local */
git push -u origin master /* push to remote(origin) and branch(master)
/* Cloning a GitHub Repo - create and get the URL of a new repository from GitHub, then clone that to your local repo, example below uses local repo named 'nameoffolder' */
git clone nameoffolder
/* Push to Remote from Local - more - since when we pushed the local to remote we used -u parameter then the remote branch is tracked to the local branch and we just need to use... */
git push
git push origin newbranch /* Push a branch to a remote */
/* Fetch changes from a cloned Repo */
git fetch origin /* Pulls down latest committs from remote origin/master not origin, also pull down any branches pushed to Repo
Fetch before you work
Fetch before you pull
Fetch often */
/* Merge with origin/master */
git merge origin/master
git pull /* you can also do git pull which is = git fetch + git merge
Checkout/Copy a remote branch to local */
git branch branchname origin/branchname /* this will bring the remote branch to local and track with the remote */
/* Delete branch */
git branch -d branchname
/* Checkout and switch branch and track to remote */
git checkout -b nontracking origin/nontracking
/* Remove remote branch */
git push origin --delete branch
git checkout path-to-file /*restores a file before it is staged */
git reset HEAD path-to-file /*if it is staged - restores a file from last commit and then git checkout path-to-file */
git checkout HEAD^ path-to-file /*if is staged and committed - restores from last commit */
git reset --hard HEAD^ /*restore prior commit */
/*Keeping the local synced with the origin after the local is reset
* ref
git push --force origin master
git rm --cached filetoremove /* Removes a file that is committed from repo but leaves it still locally - handy when you've added something that you don't want tracked */
/* Undo last push to github - below forces commit entered in to overwrite remote - so in case below origin is local and master is remote*/
git push -f origin last_known_good_commit:master
* Tags
* Adding a Tag
git tag -a v1.0.0 -m "add message here" /*tagging a commit with a version number*/
git push --tags /* pushes tag info to master remote */
/*You can checkout a commit and add a tag to that commit by checking out its SHA */
git checkout f1f4a3d /*checking out a commit - see the commit SHAS by git log */
* Changing Tag to different commit
* Deleting the tag
git tag -d v1.0.0 /*change version number to suit - we are deleting it here*/
git push origin :refs/tags/v1.0.0 /*push change to remote - change 'origin' to your remote name*/
* Adding it again - but this time it would be to the latest commit
git tag v1.0.0 /*create new tag - change version number to suit */
git push origin master --tags /* assign to latest commit - change 'origin' to your remote name*/
* Syncing a Fork
* Have the Fork already created in Github
git clone myfork /* make a local copy of the fork */
/* cd into the repo*/
git remote add upstream /* make an upstream remote repo */
git remote -v /* check all the repos */
git fetch upstream /* get the original repo */
git checkout master /* ensure you in your local master branch */
git rebase upstream/master /* rewrite your local master branch on top of the upstream */
git push -f origin master /* needs -f the first time after rebase */
/* This will result in the fork master branch being 'even' with the original master branch */
* Creating an Upstream Branch from an already added branch
git push --set-upstream dev master /* Here the remote 'dev' branch is set as Upstream to the local 'master' branch */
git branch -vv /* Shows which branch is the Upstream, if you need to change just use the preceeding command again */
* Checking out a Fork with a certain pull request on a new branch
git checkout -b newbranchname
git pull theirbranchname
* Remove Git submodule -
git rm --cached submodule_path # delete reference to submodule HEAD (no trailing slash)
git rm .gitmodules # if you have more than one submodules,
# you need to edit this file instead of deleting!
rm -rf submodule_path/.git # make sure you have backup!!
git add submodule_path # will add files instead of commit reference
git commit -m "remove submodule"

This comment has been minimized.

Copy link

@Tomvictor Tomvictor commented Dec 9, 2015

Thank you


This comment has been minimized.

Copy link

@huakwan huakwan commented Jan 5, 2018



This comment has been minimized.

Copy link

@masiama masiama commented Jan 23, 2018

Why file extension is .css?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment