| name | merge-conflict-resolver |
| description | 타깃 브랜치(보통 main)를 rebase 또는 merge 하고, 머지 충돌을 파일 하나씩 양쪽 의도를 살려 해결한 뒤, 브랜치가 최신이 되고 테스트가 통과(종료 코드 0)할 때까지 반복하는 수동 시작 루프입니다. 사용자가 "이 브랜치 main 위로 rebase 하고 충돌 다 풀어줘", "머지 충돌 해결해줘", "conflict 난 거 하나씩 정리하고 테스트까지 통과시켜줘", "브랜치 최신화하고 충돌 풀어줘", "merge conflict resolver", "rebase on main and resolve conflicts", "resolve merge conflicts until tests pass"처럼 충돌이 난 브랜치를 최신화하면서 conflict를 끝까지 풀고 싶을 때 사용하세요. (구분: 머지/rebase 직후 스모크 회귀 감시는 looping:post-merge-regression-guard, 단일 PR을 만들어 CI green·머지 가능까지 끌고 가는 건 looping:ship-pr-until-green, rebase 없이 깨진 테스트만 통과시키는 건 looping:test-until-green, 여러 PR을 주기적으로 rebase·관리하는 건 looping:pr-babysitter) |
머지 충돌 해결사 (Merge Conflict Resolver)
타깃 브랜치를 rebase 또는 merge 하고, 충돌을 파일 단위로 해결하며, 브랜치가 최신이 되고 테스트가 통과할 때까지 반복합니다.
| 항목 | 값 |
|---|
| 카테고리 | Git |
| 트리거 | 수동(manual) — 사람이 직접 시작 |
| 종료 조건(Exit) | rebase가 완료되고 테스트가 종료 코드 0일 때 |
| 반복 한도(Max iterations) | 8 |
| 매 반복 체크 명령 | npm test |
| 가드레일 | 강화됨(Hardened) |
| 지원 에이전트 | Claude Code · Cursor |
이 루프는 언제 쓰나
feature 브랜치가 main에서 한참 뒤처져 rebase·merge를 시도하면 충돌이 우수수 나는 상황에서 씁니다. 충돌 파일을 일일이 열어 "이쪽 살리고 저쪽 버리고"를 손으로 판단하기 번거로울 때, 에이전트가 업데이트 → 충돌 해결 → 테스트 검증을 스스로 반복하며 "브랜치가 최신이고 테스트도 통과"하는 상태로 수렴시킵니다.
핵심은 충돌을 파일 하나씩 처리하면서 양쪽의 의도를 모두 보존하고, 변경은 최소로 막는 것입니다. 한쪽을 통째로 버려서 충돌만 사라지게 만드는 식의 날림 해결을 막고, 매 해결 묶음 뒤에 테스트를 돌려 회귀를 즉시 잡습니다.
루프 흐름
수동 시작 → 브랜치 업데이트(rebase/merge) → 충돌 해결 → 검증(테스트) →〔피드백 게이트〕rebase 완료 & 테스트 통과?
↑ │ 아니오
└────────────────────────────────────────────────────────────┘
│ 예
종료
매 반복(pass)마다 하는 일
- 브랜치 업데이트(Update branch) — 최신 main을 fetch 하고 rebase 또는 merge를 시도합니다.
git fetch origin && git rebase origin/main
- 충돌 해결(Resolve conflicts) — 충돌마다 양쪽을 모두 읽고, 의도를 보존하며, 최소 변경으로 해결합니다.
- 검증(Verify) — 해결 묶음마다 테스트를 돌립니다.
npm test
가드레일 (점수 조작 방지 규칙)
종료 조건을 "가짜로" 통과시키지 못하게 막는 규칙입니다. 반드시 지키세요.
- 체크 명령이나 종료 기준을 고쳐서 억지로 성공시키지 않는다.
- 체크를 건너뛰거나 비활성화·우회해서 종료 조건을 통과시키지 않는다.
- 여러 번 반복해도 막히면, 지표를 조작하지 말고 멈추고 블로커를 보고한다.
Claude Code에서 실행하기
가장 간단합니다. 아래 kickoff 프롬프트를 그대로 붙여넣으면 에이전트가 rebase → 충돌 해결 → 테스트를 스스로 반복합니다.
"머지 충돌 해결사(Merge Conflict Resolver)" 루프를 시작합니다.
목표: 브랜치를 main 위로 rebase 해 충돌이 없고 테스트가 통과하는 상태
최대 반복: 8
매 반복 사이 실행: npm test
종료 조건: rebase가 완료되고 테스트가 종료 코드 0일 때
1단계: main 위로 rebase 한다. 충돌은 파일 하나씩 해결하고, 테스트를 돌린 뒤 계속한다.
이 루프를 스스로 페이싱(self-pace)하라. 매 반복 후 체크 명령을 실행하고 출력을 읽어, 종료
조건이 충족되지 않았을 때만 계속한다. 종료 조건이 통과하거나 최대 반복에 도달하면 멈춘다.
매 회차마다 한 줄 상태 업데이트를 남긴다.
팁: git rebase origin/main과 npm test는 예시입니다. merge 워크플로를 쓰면 git merge origin/main으로, 테스트는 프로젝트에 맞게 pytest, go test ./..., cargo test, pnpm test 등으로 바꾸세요. rebase 도중 중단하고 싶으면 git rebase --abort로 원상복구할 수 있다는 점을 에이전트에게 알려 두면 안전합니다.
팁 / 변형
- rebase vs merge: 히스토리를 깔끔하게 유지하려면
git rebase origin/main, 머지 커밋을 남겨 협업 이력을 보존하려면 git merge origin/main으로 바꾸세요. 충돌 해결 → 테스트 로직은 동일합니다.
- 막힐 때: 같은 파일에서 충돌이 반복되거나 제품 판단이 필요한 충돌(둘 다 옳은 변경이라 한쪽을 못 고름)이면, 가드레일대로 억지로 끝내지 말고 멈추고 해당 파일·결정 지점을 보고하게 하세요.
- 검증 강화: 통과 후 통합 회귀를 추가로 잡고 싶으면
npm test 대신 스모크 스위트(npm run test:smoke)를 끼우거나, 머지 직후 감시는 looping:post-merge-regression-guard로 이어 붙이세요.
- 연관 루프: 머지/rebase 직후 스모크 회귀 감시는
looping:post-merge-regression-guard, 깨진 테스트만 green까지 돌리는 건 looping:test-until-green, 충돌 해결 뒤 PR까지 완주는 looping:ship-pr-until-green.
원본 영어 kickoff (loops.elorm.xyz 원문)
Start the "Merge Conflict Resolver" loop.
Goal: branch is rebased on main with no conflicts and tests pass
Max iterations: 8
Between iterations run: npm test
Exit when: rebase completes and tests exit 0
Step 1: Rebase on main. Resolve conflicts one file at a time, run tests, continue.
Self-pace this loop. After each iteration, run the check command, read the output, and only continue if the exit condition is not met. Stop when the exit condition passes or max iterations is reached. Give a short status update each pass.
출처: https://loops.elorm.xyz/loops/merge-conflict-resolver