note

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>