Initial commit with translated description
This commit is contained in:
43
history.md
Normal file
43
history.md
Normal file
@@ -0,0 +1,43 @@
|
||||
# History Traps
|
||||
|
||||
## Reset
|
||||
|
||||
- `git reset --hard` loses uncommitted changes PERMANENTLY — no undo
|
||||
- `--hard` vs `--soft` vs `--mixed` — each moves different things
|
||||
- Reset of pushed commit = history diverges — you need force push
|
||||
- Reset with untracked files = untracked survive — can surprise you
|
||||
|
||||
## Revert
|
||||
|
||||
- Revert creates NEW commit — doesn't delete the original
|
||||
- Revert of merge commit needs `-m 1` or `-m 2` — without it, error
|
||||
- Revert of revert = re-applies changes — confusing history
|
||||
- Revert of old commit can conflict with later commits
|
||||
|
||||
## Amend
|
||||
|
||||
- `--amend` changes SHA — amended commit is DIFFERENT commit
|
||||
- Amend of pushed commit = same problems as rebase
|
||||
- `--amend` without staging = only changes message
|
||||
- Accidental amend on wrong commit = use reflog to recover
|
||||
|
||||
## Reflog
|
||||
|
||||
- Reflog is LOCAL — doesn't sync with remote
|
||||
- Reflog expires (default 90 days) — old commits lost
|
||||
- `git gc` can clean unreachable commits before expiration
|
||||
- Reflog of deleted branch is in HEAD reflog, not branch reflog
|
||||
|
||||
## Cherry-pick
|
||||
|
||||
- Cherry-pick creates new commit with different SHA
|
||||
- Cherry-picking then merging = duplicate commits in history
|
||||
- Cherry-pick of merge commit needs `-m` flag
|
||||
- Conflicts in cherry-pick = resolve same as rebase
|
||||
|
||||
## Blame
|
||||
|
||||
- `git blame` shows last change, not original author
|
||||
- Blame ignores whitespace changes with `-w`
|
||||
- `git log -p filename` shows full history of changes
|
||||
- Blame on moved code: use `git log --follow` for renamed files
|
||||
Reference in New Issue
Block a user