My random notes on Git use.
g checkout path | for path, reset WT to Index (change WT) |
g checkout tree-ish path | for path, reset WT and Index to tree-ish (change WT and Index) |
g checkout branch | switches branch by updating the index, working tree, and HEAD to reflect the specified branch (current branch is switched) |
g checkout commit_id | check out a commit for inspection and discardable experiments. (current branch is switched) |
g checkout -p commit_id | don't switch branch; update working tree and Index interactively. E.g. g checkout -p HEAD |
g checkout -b branchname\ start_point | create a new branch from start_point and switch to it. (current branch is switched) |
g checkout | not sure yet! |
g reset path | for path, reset index to HEAD (WT and branch are not touched) |
g reset commit path | for path, reset index to commit (WT and branch are not touched) |
g reset --option commit | reset HEAD to commit, and reset index or WT according to option (http://www.kernel.org/pub/software/scm/git/docs/git-reset.html) |
--soft | only reset HEAD |
--mixed (default) | reset HEAD and index |
--hard | reset HEAD, index, and WT |
--merge | reset HEAD and index; for each file: HEAD != commit, then reset WT; Index != WT, then don't reset WT; HEAD != commit && Index != WT, then abort. |
--keep | reset HEAD and index; for each file: HEAD == commit, then don't reset WT; HEAD != commit && WT == Index && Index == HEAD, then reset WT; HEAD != commit && has local changes, then abort. |
git rebase -i upstream | interactively rebase. You can choose to squash commits. E.g. git rebase -i HEAD^4, git rebasei HEAD@{4} |