Files
ivangdavila_git/branching.md

1.8 KiB

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