Concepts

blob tree commit refs remote refs tag wc staging area
dag remotes branch HEAD tag

Plumbing

git cat-file git ls-files

git init git commit git branch MY_BRANCH git checkout MY_BRANCH git fetch git pull –rebase ORIGIN MY_BRANCH git push git push –force-with-lease

git add -i git rebase -i git rebase FIRST_THIS THEN_THIS Rewrite THEN_THIS csets on top of FIRST_THIS git rebase -X renormalize main Ignorera radslutsskillnader git log –graph –pretty=oneline –abbrev-commit –all Or use gitk git reset SHA1 git switch

TODO(dannas): Clarify ditinction between path and branch parameters to restore/checkout/reset https://redfin.engineering/two-commits-that-wrecked-the-user-experience-of-git-f0075b77eab1 git restore Restore files in wc from index or commit git restore –staged foo.c

git reset Moves current branch ref git checkout Moves HEAD git switch

man gitrevisions man gittutorial man gittutorial2

http://sethrobertson.github.io/GitBestPractices/ http://sethrobertson.github.io/GitFixUm/fixup.html

git revert makes new commit taht reverts the changes made by other commits git restore restore files in wc from index or another commit. Or restore files in index from other commit Does not update your branch git reset Update your branch, move tip in order to add or remove commits git rebase upstream my-branch –onto new_base Move my-branch from upstream to new_base

Git tags

git tag list all tags git tag -a TAGNAME -m “commit msg” # Create annotated tag (the type we want) git push –follow-tags # Pushes all reachable annotated tags

Git revisions

sha1 output from git describe refname @ shortcut for HEAD [email protected] [email protected] ^n n’th parent ~n n’t first parent

Git revision range

git log single revision means set of commits reachable from the given commit r1..r2 (two dot) commits reachable from r2, excluding those reachable from r1 (r1=from, r2=to) r1…r2 (three dot) commits reachable from r2 and r1 but not from both