49 lines
1.2 KiB
Markdown
49 lines
1.2 KiB
Markdown
|
|
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 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
|
|
```
|
|
|
|
|
|
|
|
|