Initial commit with translated description

This commit is contained in:
2026-03-29 09:49:59 +08:00
commit b25c20bddb
8 changed files with 582 additions and 0 deletions

42
branching.md Normal file
View File

@@ -0,0 +1,42 @@
# Branching Traps
## Branch Creation
- `git checkout -b feature` from wrong branch = incorrect base
- `git branch feature` without checkout = you stay on previous branch — commits go there
- Branch name with spaces fails silently in some tools
- `/` in branch name (feature/x) = some systems see it as directory
## Switching
- `git checkout branch` with uncommitted changes = they may go to new branch — confusing
- `git switch` is safer but `-f` loses changes without warning
- Auto stash doesn't exist — tracked changes are blocking, untracked get mixed
- Checkout of branch with different submodule = submodule stays in previous state
## Merge
- Fast-forward merge doesn't create merge commit — linear history but no context
- `--no-ff` always creates merge commit — useful for features, noise for fixes
- Merge of long branch = mega merge commit hard to review/revert
- Branch deleted after merge = orphan commits if no tag
## Rebase
- Rebase of published branch = different history = others must `--force` pull
- Bad interactive rebase can lose commits — use reflog to recover
- Conflicts in rebase: resolve EACH commit, not just once
- Rebase changes SHAs — CI/CD references to old commits broken
## Remote Tracking
- `git push -u origin feature` needed first time — without `-u` it doesn't track
- Remote branch deleted doesn't delete local tracking — `git fetch --prune` to clean
- `git pull` without upstream configured = error — `git branch --set-upstream-to`
- Remote rename doesn't update tracking branches — reconfigure manually
## Naming Conventions
- Same branch in two remotes (origin/main, upstream/main) = confusion
- Branch name case-insensitive on Mac/Windows, sensitive on Linux — CI bugs
- Branch named same as tag = ambiguity in some commands