에이전트에게 rebase 충돌을 맡길 때 프롬프트는?
에이전트 rebase 충돌 위임은 “브랜치 전체 재작성”이 아니라, 멈춘 한 커밋의 충돌 파일만 넘기고 git add → git rebase --continue까지를 성공 조건으로 고정하는 축입니다. 근거는 git-rebase입니다. 요금·플랜·제휴·발명 UI는 없습니다.
rebase가 충돌에서 멈추면 Git은 문제 커밋에 멈춰 충돌 마커를 남깁니다. 선택지는 문서 그대로 (1) 해결 후 --continue, (2) --abort로 원상 복구, (3) --skip으로 현재 패치 생략입니다. 에이전트에게는 (1)만 기본 허용하고, skip/abort·히스토리 재작성·force push는 사람 게이트로 둡니다.
충돌 파일을 어떻게 넘기나?
한 줄 답: git status로 unmerged 경로만 목록화하고, 그 파일(+의도 한 줄)만 프롬프트에 붙입니다. 전체 트리·대화 로그·“알아서 rebase 끝내”는 넘기지 않습니다.
git-rebase 흐름에 맞춘 전달 순서:
- 상태 스냅샷 —
git status(또는git diff --name-only --diff-filter=U)로 충돌 파일 목록을 확보합니다. “어느 커밋에서 멈췄는지”는git rebase --show-current-patch로 확인합니다. - 범위 고정 — 프롬프트에 허용 경로 allowlist만 적습니다. 예:
src/foo.ts,src/bar.ts. allowlist 밖 수정·포맷 일괄·락파일 손대기는 금지합니다. - 의도 한 줄 — “ours=onto(상류), theirs=재생 중인 커밋”이 아니라, 제품 의도를 적습니다. 예: “상류의 API rename을 유지하고, 우리 커밋의 새 가드를 같은 심볼에 이식.”
- 금지 명령 —
git rebase --skip,git rebase --abort,git push --force,reset --hard, 다른 브랜치 checkout을 하지 말 것을 명시합니다. - 산출물 — 에이전트는 마커 제거·의도 반영 편집 →
git add <paths>까지만.--continue는 사람 확인 후 또는 “마커 잔존·허용 외 diff 없음” 자동 검사 통과 시에만.
복붙용 프롬프트 골격:
Context: git rebase stopped on a conflict. Do NOT skip/abort/force-push.
Allowed paths only:
- path/a.ts
- path/b.ts
Intent (one line): <keep upstream rename; port our guard onto new names>
Steps:
1) Read only allowed paths; resolve conflict markers (<<<<<< ======= >>>>>>)
2) git add <allowed paths only>
3) Stop. Report: resolved files, remaining markers (must be none), git status
Do not edit other files. Do not run git rebase --continue until I say so.
넘기지 말 것: 시크릿·.env, 무관한 대용량 diff, “전체 저장소를 최신으로 맞춰” 같은 개방형 지시. worktree로 에이전트를 격리했다면 cwd를 그 worktree로 고정합니다(git-worktree-agent 축).
성공 조건은?
한 줄 답: 허용 경로에 충돌 마커가 없고, unmerged가 해소되어 staged이며, allowlist 밖 diff가 없으며, 그다음에야 git rebase --continue가 다음 커밋으로 넘어가거나 rebase가 끝나는 것입니다.
성공 체크리스트:
| 검사 | 통과 기준 |
|---|---|
| 마커 | 허용 파일에 <<<<<<< / ======= / >>>>>>> 잔존 없음 (rg/git grep) |
| 인덱스 | 충돌 경로가 git add됨. git status에 unmerged 없음 |
| 범위 | git diff --cached --name-only ⊆ allowlist. 포맷·락·생성물 폭주 없음 |
| 의도 | 한 줄 Intent와 실제 hunk가 맞음 (심볼 rename·가드 위치) |
| continue | 사람(또는 게이트)이 --continue 실행. 에디터/커밋 메시지 정책은 팀 규칙 |
| 회귀 | 합의된 최소 테스트·빌드(해당 시) 통과. “에이전트가 됐다”만으로는 부족 |
문서상 continue 의미: 충돌을 해결한 뒤 rebasing을 재개합니다. 해결 과정에서 패치 내용이 사실상 비면 --continue 대신 --skip이 맞을 수 있으나, skip은 그 커밋 변경을 버리는 선택이라 기본 성공 경로에 넣지 않습니다. 에이전트가 “변경이 없다”고 보고하면 사람이 git status·git diff를 보고 skip/continue/abort를 고릅니다.
실패로 볼 신호:
- allowlist 밖 파일 수정·삭제
- 마커를 남긴 채 add
- 충돌을 “한쪽 전체 채택”으로만 뭉개고 Intent와 불일치
--skip/--abort/ force push 시도- rebase 중이 아닌 브랜치에 커밋
위험해서 사람이 해야 하는 경우는?
한 줄 답: 의미 충돌·보안·히스토리·공유 브랜치가 걸리면 에이전트 위임을 멈추고 사람이 해결하거나 --abort합니다.
사람이 직접 할 경우:
| 상황 | 이유 |
|---|---|
| 스키마·마이그레이션·권한·결제·인증 | 잘못된 한쪽 채택이 데이터·권한 사고로 이어짐 |
| 시크릿·키·라이선스·법적 문구 | 마커 자동 병합·로그 유출 위험 |
| 바이너리·생성물·잠금파일 대규모 | 의도 판단이 어렵고 diff 리뷰 비용이 큼 |
| 같은 줄에 둘 다 필요한 의미 병합 | Intent 한 줄로 부족. 도메인 소유자 판단 |
interactive rebase 투두 편집(--edit-todo)·squash/fixup 재배치 | 히스토리 재작성. 에이전트 기본 범위 밖 |
| 이미 push된 공유 브랜치 rebase + force | 협업 계약·CODEOWNERS 영역 |
| 연속 다수 커밋 충돌·범위 폭주 | 커밋마다 사람 게이트. 한 프롬프트에 “전부 해결” 금지 |
| 에이전트가 skip을 제안하거나 패치가 비게 됨 | skip은 커밋 폐기. 사람이 확인 |
실무 규칙:
- 한 번에 한 멈춤 — 이번 unmerged만. continue 후 다음 충돌이 나면 새 프롬프트로 다시 allowlist를 잡습니다.
- abort는 안전망 — 의도 불명·범위 이탈이면
git rebase --abort로 시작 전 상태로 돌리고, 충돌을 쪼개거나 사람이 수동 해결합니다. - skip은 예외 — “이 커밋을 의도적으로 버린다”는 사람 확인 후에만.
- 리뷰 축 분리 — 해결된 diff를 머지 전에 사람이 읽는 법은 agent-diff-review. 워킹트리 격리는 git-worktree-agent.
주의: 에이전트에게 “충돌 나면 알아서 skip하고 끝내”라고 하지 마십시오. git-rebase의
--skip은 현재 패치를 건너뛰는 명시적 선택입니다.
FAQ
ours/theirs를 에이전트에게 어떻게 설명하나요?
rebase 중 레이블 혼동이 잦습니다. 쪽 이름보다 Intent(상류 rename 유지, 우리 가드 이식 등)를 한 줄로 적는 편이 안전합니다. 필요하면 git rebase --show-current-patch 출력을 함께 붙입니다.
git rebase --continue를 에이전트에 맡겨도 되나요?
팀이 마커·allowlist·status 자동 게이트를 두었다면 가능합니다. 기본 권장은 add까지 에이전트, continue는 사람입니다. continue 시 커밋 메시지 편집(merge 백엔드)이 열릴 수 있습니다.
merge 충돌 해결 글과 무엇이 다른가요?
절차(마커 → add)는 비슷하지만, rebase는 커밋을 순서대로 재적용하다 멈추므로 --continue / --skip / --abort 의미가 다릅니다. 이 글은 rebase 정지점 + 에이전트 프롬프트 경계에 초점을 둡니다.
충돌이 너무 많으면?
--abort 후 브랜치를 쪼개거나, 상류를 먼저 맞춘 작은 단위로 rebase합니다. 한 프롬프트에 파일 수십 개를 넣지 마십시오.
출처 (Sources)
- Git — git-rebase — 충돌 시 정지,
--continue/--skip/--abort,--show-current-patch - GitHub Docs — Resolving merge conflicts after a git rebase — 정지 메시지와 세 가지 선택지
- 인접 축: git-worktree-agent(격리), agent-diff-review(해결 후 사람 리뷰), agent-deny-paths(시크릿 경로)