Set Global config (Omit --global
to lit config to current repo)
These will be reflected as Author details in each commit you make
Command
Description
git config --global user.name "your_username"
Author
git config --global user.email "your_email"
Author email
Command
Description
git config --global core.editor "vim"
Change editor to vim
git config --global core.ignorecase false
Detect changes in filename case change
git config --global init.templatedir '~/.git_template
Set git template dir (to configure hooks )
git config --global push.autoSetupRemote true
Skip git branch --set-upstream
while pusing new branch to remote
Git alias to create custom command shortcuts
Command
Description
git config --global alias.<short-alias> 'full command'
Create a new git alias in the form of a new git command
git config --global alias.ucc 'commit --amend --no-edit'
Run git ucc
instead of git commit --amend --no-edit
Command
Description
git config --global --unset <config-key>
Unset global config ex: git config --global --unset user.name
git config --unset <config-key>
Unset local config ex: git config --unset user.name
Command
Description
git config --list --show-origin
List all the configs and their location
More operations on config
Adding git to the project:
Command
Description
git init .
Initialize git inside the project root directory.
git add .
Stage all files for commit when run from the root directory
git commit -m "commit-message"
Commit staged files to git.
Adding Remote repo to Project:
Command
Description
git remote add <remote_name> <remote_address>
Add remote repository where remote_name: origin,upstream etc remote_address:(URL) Github, Bitbucket etc
git remote set-url origin <remote_address>
Update remote address
git remote rename origin upstream
Rename remote from origin to upstream
git remote remove <remote_name>
Delete remote
git remote rename origin upstream
Rename remote
git push <remote_name> <branch-name>
Push all the commits to remote default branch name master
Synchronizing local with remote (upstream):
Command
Description
git fetch
Download changes from remote (default origin
) without making any changes to files in the working directory.
git pull
Download remote commits from the origin repository configured as upstream for the current branch.
git push
Upload local commits to remote.
Command
Description
git branch -a
Show all branches.
git branch <new_branch_name>
Create a new branch (Will not switch working tree to new branch).
git checkout -b <new_branch_name>
Create a new branch out of the current branch and switch to the new branch.
git checkout --orphan <new_branch_name>
Create a new branch without any parent commit (empty branch)
git branch -m <old_branch_name> <new_branch_name>
Rename branch.
git push <remote_name> <branch_name>
Push local branch to remote.
git checkout <branch_name>
Switch to specified branch.
git branch -d <branch_name>
Delete local branch (replace -d by -D for force delete)
git push <remote_name> :<branch_name>
Delete remote branch.
git branch --contains <commit_id>
Search branches containing the given commit id
Save current changes without committing before doing pull and checkout to another branch
Command
Description
git stash save "message"
Save changes with give message after running git add <path>
git stash list
Show stash list
git stash pop
Apply the last stash to the current branch and delete stash
git stash apply stash@{n}
Apply n
th stash without deleting from stash
git checkout stash@{n} -- <filename>
check out a file from n
th stash
git stash clear
Clear all stash
git stash show -p
view last stash content
git stash show -p stash@{n}
view n
th stash content
Command
Description
git commit --amend
Edit last commit message.
git commit --author="First Last <first.last@company.xxx>" --amend --no-edit
Edit the author info of the last commit.
git revert <commit_id>
Rollback to the commit specified by commit_id
git rebase -i HEAD~n
Opens list of the last n commits, replace "pick" by "reword" to alter the commit message of those commits.
git reset --soft HEAD~n
Uncommit the last n commits without overwriting the working directory files.
git reset --hard HEAD~n
Uncommit last n changes and overwrite the working directory files
git cherry-pick <commit_id>
Pull commit from any branch by its commit id into the current branch
git rev-parse --short HEAD
Print last commit id
git commit --all --amend --no-edit
Add current changes to last commit
git merge-base <branch A> <branch B>
Get the latest common commit ID between branch A
and branch B
Command
Description
git merge <branch_name>
Merge any branch into current branch
git merge <branch-name> --no-commit
Merge without merge commit.
git pull <remote_name> <branch_name>
Pull from remote branch and merge
git checkout <branch_name> -- <file_name>
Checkout single file from any branch
git checkout <branch_name> -- .
Checkout all the files from any branch
Option
Command
1
git rebase
2
git rebase <remote_name>/<branch_name>
Run these commands after updating the .gitignore file and then commit the changes.
Command
Description
git rm --cached <filename>
Remove specific file from git cache
git rm -r --cached .
Remove all files from git cache
Taggign is widely used to create releases and mark milestones
Command
Description
git tag -l
List all the tags
git tag -a <tagname> -m <message>
Create an annotated tag, with detailed info about the tagger
git tag <tagname>
Create a lightweight tag, tag with only a reference to commit
git tag -l "v1.0.*"
List all the tags matching given pattern
git show <tagname>
View tag details
git push origin <tagname>
Transfer tag to remote
git push origin --tags
Transfer all local tags to remote
git tag -d <tagname>
Delete local tag
git push origin --delete <tagname>
Delete remote tag
Upstream is used when we have multiple repositories for a single project
Command
Description
git branch --set-upstream-to=<remote_name>/<remote_branch_name> <local_branch_name>
Set new upstream for the branch.
git branch --set-upstream-to=<remote_name>/<remote_branch_name>
Set new upstream for the current branch.
git push -u <remote_name> <branch_name>
Push to remote branch and set as upstream
List commits in git (log):
Command
Description
git log
List all commits (comprehensive)
git log --oneline
Lit all commits (brief)
git log -n
The n is number of commits to list
git log --all --grep='<message content>'
List/Find commits by message content
git log master..newBranch
List commits that newBranch
has but master
doesn't
Note: ref1 and ref2 could be branchNames
, remoteName/branchName
, commit SHAs
, etc
Command
Description
git diff ref1:path/to/file1 ref2:path/to/file2
Show difference between two references
git diff -- path/to/file ... origin
Show file difference between the local file and remote file of the current branch
git diff branch_name:path/to/file
Simplified version of the above command
git diff -- /dev/null path/to/file
Show contents of the untracked file in diff style
without author info:
Command
Description
git diff > my_changes.patch
Create patch file
git apply my_changes.patch
Applying patch file
List file activity since the last commit:
Command
Description
git status
List all created/modified/deleted/staged files
git status . -- ':!dir1' ':!dir2'
skip status result for the given directories
Command
Description
git ls-files --others --exclude-standard
List all untracked files.
git ls-files --modified --exclude-standard
List all modified files.
git update-index --assume-unchanged <ignore file>
Ignore file modification.
git update-index --no-assume-unchanged <ignored file>
Revert above action.
git show <branch>:<file>
Peek into file from different branch.
It is useful when working on multiple branches simultaneously without maintaining multiple clones for each branch.
Command
Description
git worktree add ../myProject-master master
Master branch code can be accessed at ../myProject-master
git worktree list
list all worktrees from project directory
git worktree remove ../myProject-master
Delete worktree (folder will still be there)
git worktree repair ../new/worktree/path
Repair worktree after moving worktree or bare repository locally to a different location
Commands to manage submodules.
Command
Description
git submodule add <repo_address> <submodule_path>
Add new submodule at submodule_path
git submodule update --init
Download all the submodules after cloning the main repo and also reset the submodule commit to the parent commit
Commands to copy the directory.
Command
Description
git restore --source <branch> dirname
Copy the directory from any branch without git history
Commands keep the local repo clean and faster.
Command
Description
git prune
Clean up orphaned objects/commits
Update the last commit which is already pushed to remote.
git add . && git commit --amend --no-edit && git push --force
Merge multiple local commits into a single commit before pushing to remote
git rebase -i HEAD~10
replace pick
with fixup
for the commits you want to merge.
Note: The oldest commit is at the top.
Disable terminal screen (oh-my-zsh)
Add the below line to ~/.zshrc
for permanent change.