Pull
Workflow
- Verify git status is clean or commit/stash changes before merging.
- Ensure rerere is enabled locally:
git config rerere.enabled true
git config rerere.autoupdate true
- Confirm remotes and branches:
- Ensure the
origin remote exists.
- Ensure the current branch is the one to receive the merge.
- Fetch latest refs:
- Sync the remote feature branch first:
git pull --ff-only origin $(git branch --show-current)
- This pulls branch updates made remotely (for example, a GitHub auto-commit)
before merging
origin/main.
- Merge in order:
- Prefer
git -c merge.conflictstyle=zdiff3 merge origin/main for clearer
conflict context.
- If conflicts appear, resolve them (see conflict guidance below), then:
git add <files>
git commit (or git merge --continue if the merge is paused)
- Verify with project validation commands:
go build ./...
go test ./... -count=1
go vet ./...
test -z "$(gofmt -l .)"
- Summarize the merge:
- Call out the most challenging conflicts/files and how they were resolved.
- Note any assumptions or follow-ups.
Conflict Resolution Guidance (Best Practices)
- Inspect context before editing:
- Use
git status to list conflicted files.
- Use
git diff or git diff --merge to see conflict hunks.
- Use
git diff :1:path/to/file :2:path/to/file and
git diff :1:path/to/file :3:path/to/file to compare base vs ours/theirs
for a file-level view of intent.
- With
merge.conflictstyle=zdiff3, conflict markers include:
<<<<<<< ours, ||||||| base, ======= split, >>>>>>> theirs.
- Summarize the intent of both changes, decide the semantically correct
outcome, then edit.
- Prefer minimal, intention-preserving edits:
- Keep behavior consistent with the branch's purpose.
- Avoid accidental deletions or silent behavior changes.
- Resolve one file at a time and rerun tests after each logical batch.
- Use
ours/theirs only when you are certain one side should win entirely.
- For complex conflicts, search for related files or definitions to align with
the rest of the codebase.
- After resolving, ensure no conflict markers remain:
When To Ask The User (Keep To A Minimum)
Do not ask for input unless there is no safe, reversible alternative. Prefer
making a best-effort decision, documenting the rationale, and proceeding.
Ask the user only when:
- The correct resolution depends on product intent or behavior not inferable
from code, tests, or nearby documentation.
- The conflict crosses a user-visible contract, API surface, or migration where
choosing incorrectly could break external consumers.
- A conflict requires selecting between two mutually exclusive designs with
equivalent technical merit and no clear local signal.
- The merge introduces data loss, schema changes, or irreversible side effects
without an obvious safe default.
Otherwise, proceed with the merge, explain the decision briefly in notes, and
leave a clear, reviewable commit history.
1---2name: pull3description: Pull latest origin/main into the current local branch and resolve merge conflicts (aka update-branch). Use when Codex needs to sync a feature branch with origin, perform a merge-based update (not rebase), and guide conflict resolution best practices.4---56# Pull78## Workflow9101. Verify git status is clean or commit/stash changes before merging.112. Ensure rerere is enabled locally:12 - `git config rerere.enabled true`13 - `git config rerere.autoupdate true`143. Confirm remotes and branches:15 - Ensure the `origin` remote exists.16 - Ensure the current branch is the one to receive the merge.174. Fetch latest refs:18 - `git fetch origin`195. Sync the remote feature branch first:20 - `git pull --ff-only origin $(git branch --show-current)`21 - This pulls branch updates made remotely (for example, a GitHub auto-commit)22 before merging `origin/main`.236. Merge in order:24 - Prefer `git -c merge.conflictstyle=zdiff3 merge origin/main` for clearer25 conflict context.267. If conflicts appear, resolve them (see conflict guidance below), then:27 - `git add <files>`28 - `git commit` (or `git merge --continue` if the merge is paused)298. Verify with project validation commands:30 ```bash31 go build ./...32 go test ./... -count=133 go vet ./...34 test -z "$(gofmt -l .)"35 ```369. Summarize the merge:37 - Call out the most challenging conflicts/files and how they were resolved.38 - Note any assumptions or follow-ups.3940## Conflict Resolution Guidance (Best Practices)4142- Inspect context before editing:43 - Use `git status` to list conflicted files.44 - Use `git diff` or `git diff --merge` to see conflict hunks.45 - Use `git diff :1:path/to/file :2:path/to/file` and46 `git diff :1:path/to/file :3:path/to/file` to compare base vs ours/theirs47 for a file-level view of intent.48 - With `merge.conflictstyle=zdiff3`, conflict markers include:49 - `<<<<<<<` ours, `|||||||` base, `=======` split, `>>>>>>>` theirs.50 - Summarize the intent of both changes, decide the semantically correct51 outcome, then edit.52- Prefer minimal, intention-preserving edits:53 - Keep behavior consistent with the branch's purpose.54 - Avoid accidental deletions or silent behavior changes.55- Resolve one file at a time and rerun tests after each logical batch.56- Use `ours/theirs` only when you are certain one side should win entirely.57- For complex conflicts, search for related files or definitions to align with58 the rest of the codebase.59- After resolving, ensure no conflict markers remain:60 - `git diff --check`6162## When To Ask The User (Keep To A Minimum)6364Do not ask for input unless there is no safe, reversible alternative. Prefer65making a best-effort decision, documenting the rationale, and proceeding.6667Ask the user only when:6869- The correct resolution depends on product intent or behavior not inferable70 from code, tests, or nearby documentation.71- The conflict crosses a user-visible contract, API surface, or migration where72 choosing incorrectly could break external consumers.73- A conflict requires selecting between two mutually exclusive designs with74 equivalent technical merit and no clear local signal.75- The merge introduces data loss, schema changes, or irreversible side effects76 without an obvious safe default.7778Otherwise, proceed with the merge, explain the decision briefly in notes, and79leave a clear, reviewable commit history.