반복 충돌이 생기는 문제

오래 유지한 topic branch에 main을 여러 번 반영하거나 rebase를 다시 하면 비슷한 충돌을 반복해서 풀게 됩니다. 매번 기억에 의존하면 같은 파일을 서로 다르게 해결할 수 있습니다. 이때 rerere 충돌 해결 재사용을 켜면 이전 선택을 후보로 다시 적용할 수 있습니다.

Git rerere는 충돌 난 automerge 결과와 사람이 해결한 결과를 기록해 같은 형태의 충돌에 재사용하지만 index는 자동으로 확정하지 않으므로 diff 확인과 git add가 필요합니다.

기록하고 재사용하는 흐름

저장소별로 기능을 켠 뒤 첫 충돌은 평소처럼 직접 해결합니다. git add로 해결 결과를 index에 올리고 merge나 rebase를 완료하면 Git이 대응 관계를 기록합니다. 다음에 같은 형태의 충돌이 생기면 working tree에 이전 해결을 적용합니다.

git config rerere.enabled true
git merge main
# 파일을 직접 해결
git diff --check
git add src/order.ts
git commit

# 다음 충돌에서 기록 상태 확인
git rerere status
git rerere diff

적용 뒤 검증

rerere는 과거의 의도가 지금도 맞는지 판단하지 않습니다. 양쪽 branch의 코드가 달라졌다면 문법상 충돌이 사라져도 동작은 틀릴 수 있습니다. git diffgit diff --cached로 실제 내용을 읽고 관련 test를 통과시킨 뒤에만 git add합니다. 잘못 학습한 path는 현재 충돌을 원하는 방식으로 되돌린 다음 git rerere forget <path>로 해당 기록을 다시 만들 수 있습니다.

공식 문서

현재 Git version과 저장소의 rerere 설정을 확인한 뒤 사용합니다.