Git
Comprehensive Git cheatsheet covering commits, branching, rebasing, and collaboration
Git
Metrics
List commits with Author and Date:
git log --since=1.week --pretty=format:"%h - %an, %ar : %s"
Count commits per author:
git shortlog -sne --since=1.week
Show files modified by each commit:
git log --since=1.week --name-only --pretty=format:"%h - %an, %ar : %s"
Commits and Details
Remove item from staging:
git restore —staged file.py
Show commit history:
git log
Show condesed commit history:
git log —oneline
Show detailed info on commits:
git log —stat
Show detailed info on specific commit:
git show <commit hash>
How to undo change of a file:
git restore <filename>
Add files to the most recent commit:
git commit —amend —no-edit
Undo most recent commit:
git reset HEAD~1
Branching
Switch replaced checkout:
git switch -c <branch name>
Cherry Pick
Pulls a commit or commits to the current branch.
Cherry pick pulls commit to current branch:
git cherry-pick <commit-hash>
Cherry pick multiple commits:
git cherry-pick <commit-1-hash> <commit-2-hash>
Cherry pick range of commits:
git cherry-pick <commit-1-hash>~..<commit-2-hash>
Stash
Remove changes from a branch and store them so you can work on something else.
Stash changes:
git stash -u -m 'Description'
List stashes:
git stash list
Apply a stash from stack:
git stash pop —index <stash-num>
Remove stash entry:
git stash drop <stash-num>
Remove all stash entries:
git stash clear
Rebase
To incorporate changes between branches, rebase rewrites where commits occurred in Git history. Rebase copies commits from one branch, and replays them onto another branch. During rebasing, the file diffs from each commit are preserved, but parent pointers are rewritten.
Rebase can do the following to commits:
-
Split
-
Delete
-
Amend
-
Reorder
-
Reword
-
Squash
Rebase feature branch with new changes on main:
git rebase main <feature_branch>
Continue rebase after solving conflicts:
git rebase —continue
Cancel rebase:
git rebase —abort
Using merge instead of rebase to catch up feature branch:
git merge main
Interactive rebase
git rebase -i HEAD~2
Reword most recent commit message:
git commit —amend -m 'New message'
Collaboration
List all local and remote branches:
git branch —all
List remote repo info
git remote -v
Show linked branches
git branch -vv
Git pull = fetch + merge
git pull origin main
Manually pull
git fetch origin main
git merge
Pull fastforward
git pull —ff-only
Stash before pull
Upload branch to remote repo
git push -u <repo> <branch>