For advanced git commands training

You can make any training in test branch

git reset

To make a commit you need to do 3 steps:

  1. Make changes
  2. Add them to staging area
  3. Make a commit
git reset --soft      # resets #3 only
git reset (--mixed)   # resets #3 and #2
git reset --hard      # resets all #3, #2 and #1

git rebase

git rebase <hash>           # rebase using commits's hash
git rebase -i HEAD~n        # interactive rebase for last n commits 
git rebase -i --root HEAD   # interactive rebase for all commits 

git commit referencing using ^ and ~

~n      # follows straight history in one branch
^ = ^1  # first parent
^n      # n parent
^^^2    # first parent/first parent/second parent

To practice referencing checkout "merge" branch and use some command to see what commints are referenced.

git log --oneline -1 HEAD~4
git log --oneline -1 HEAD~4^2^
etc...

Commit Ranges

git log --oneline range2..range1 # use git log for showing what commits are selected (reverse order)
git cherry-pick --allow-empty (HEAD)..range1 # copy all commits from range1 branch into current that are already merged
git cherry-pick --allow-empty range1 ^range2 # copy all commits that are in range1 but not in range2 
Description
For advanced git commands training
Readme 36 KiB