Files
holocron/plugins/git/skills/git-remotes/references/pull.md
Defame1297 14af50bc07 fix(git): scope git-workflow's trigger to ambiguity rather than to its domains
git-workflow's description enumerated the six domains it exists to route away
from, so it competed for selection with the very skills it should be handing
off to. It now triggers on the case it actually serves: an interactive request
whose domain is not yet clear.

Also clears frontmatter drift across the plugin and removes duplicated guidance
in pc-run that had diverged from its reference.
2026-08-31 08:01:39 +00:00

2.2 KiB

topic, source_keys
topic source_keys
pull
git-scm-pull-docs
context7-git-htmldocs

Pulling

Default strategy: --ff-only. It fails on divergence, which forces a conscious choice instead of an accidental merge commit.

  • Fast-forward only: git pull --ff-only — the recommended default
  • Rebase: git pull --rebase replays your commits on top for linear history, but rewrites SHAs. Verify nothing being replayed has been pushed: rebasing published commits breaks everyone downstream.
  • Merge: git pull --no-rebase — three-way merge commit, preserves original commits, non-linear
  • Rebase preserving merges: git pull --rebase=merges keeps intentional local merge commits during the replay
  • Stage without committing: git pull --squash collapses incoming commits into staged changes; you write the message
  • Merge strategy: Git 2.34+ defaults to ort (recursive is now an alias for it). Strategy options such as -X ours, -X theirs, -X ignore-space-change pass through unchanged.
  • Submodules: --recurse-submodules only fetches submodules already checked out. Newly added ones are not initialized — use the git-submodules skill for those.

On divergence

A pull that diverges with no strategy configured fails, and that failure is the useful outcome. Report the divergence and the three ways out — --ff-only, --rebase, --no-rebase — and let the caller choose. Auto-merging a diverged branch buries a decision that belongs to the human.

Config precedence

The installed default varies by Git version — older versions merge on divergence, newer ones default to --ff-only — so an unset pull.ff means the same pull behaves differently on different machines. Set it explicitly.

Highest wins:

  1. Command-line flag (--ff-only / --rebase / --no-rebase)
  2. pull.rebase config (global or local)
  3. branch.<name>.rebase (branch-specific override)
  4. branch.autoSetupRebase (set automatically when the tracking branch was created)
git config pull.ff only                  # deterministic default across Git versions
git config --global pull.rebase true
git config branch.develop.rebase false   # develop always merges, regardless of the global default