Claude Code가 프로젝트 저장소에 10분마다 Git reset --hard origin/main을 실행하는 문제
2 days ago
4
macOS 환경에서 프로젝트 변경사항이 10분마다 자동으로 삭제되는 현상이 보고됨
조사 결과, 원인은 Claude Code가 아니라 사용자가 만든 별도 로컬 자동화 도구가 GitPython을 통해 주기적으로 git reset --hard origin/main을 실행한 것으로 확인됨
동일한 작업 디렉터리를 공유한 탓에 Claude Code가 원인처럼 보였으나, 실제로는 외부 스크립트가 리셋을 수행하고 있었음
Claude Code 팀은 내부 코드에 해당 명령 실행 로직이 없음을 명확히 밝혔으며, --dangerously-skip-permissions 옵션 사용 시만 유사 동작이 가능함을 설명함
최종적으로 이슈는 Claude Code 버그가 아닌 사용자 도구의 문제로 결론 나고, 제목이 수정되어 종료됨
문제 현상 및 환경
Claude Code가 사용자의 프로젝트 저장소에서 10분 간격으로 git fetch origin과 git reset --hard origin/main 을 수행하는 것으로 관찰됨
이 동작은 커밋되지 않은 추적 파일의 변경사항을 모두 삭제하며, 추적되지 않은 파일은 유지됨
Git worktree 환경에서는 이러한 리셋이 발생하지 않음
환경 정보
Claude Code 버전: 2.1.87 (Homebrew cask, Bun 바이너리)
OS: macOS 15.4 (Darwin 25.3.0, arm64)
Shell: zsh
조사 과정
Git reflog 에서 10분 간격으로 reset: moving to origin/main 로그가 95회 이상 기록됨
세션별로 오프셋은 다르지만, 각 세션 내에서는 정확히 600초 간격으로 반복됨
실시간 재현 테스트에서 추적 파일(api.ts)은 리셋 시점에 원상복구되고, 비추적 파일(.canary-test.txt)은 그대로 유지됨
fswatch 로 .git/ 디렉터리를 감시한 결과, 리셋 시점에 .git/refs 및 .git/logs/HEAD 파일이 수정되는 패턴이 포착됨
lsof 결과, 해당 저장소의 CWD를 사용하는 프로세스는 Claude Code CLI 하나뿐이었음
외부 git 프로세스는 감지되지 않아, 내부적으로 libgit2 등으로 수행된 것으로 추정됨
worktree 환경에서는 reflog에 리셋 기록이 전혀 남지 않음
배제된 원인
Git hooks, Claude Code 사용자 훅, 플러그인 업데이트, macOS 클라우드 동기화, Cron/LaunchAgents, IDE, Time Machine, 파일 감시 도구 등은 모두 무관으로 확인됨
각 항목은 실제 설정 파일 및 프로세스 점검을 통해 배제됨
바이너리 분석 (부분)
Claude Code 바이너리 내 함수 일부가 ["fetch","origin"] 명령을 수행하는 코드 조각을 포함
git pull 래퍼 함수와 fileHistory 상태 관리 로직이 존재하지만, 10분 주기 타이머는 식별되지 않음
영향
커밋되지 않은 변경사항이 10분마다 자동으로 삭제되어, 2시간 세션 동안 세 차례 이상 수정사항이 사라짐
모든 변경을 커밋한 상태에서는 리셋이 무의미하므로, 문제는 간헐적으로 보이는 특성이 있었음
Claude Code 팀의 응답
Jarred-Sumner 는 “Claude Code 자체에는 git reset --hard origin/main을 실행하는 코드가 없다”고 명확히 언급
--dangerously-skip-permissions 옵션을 사용하면 Claude가 프롬프트 없이 쉘 명령을 실행할 수 있으며,
/loop 10m <prompt> 명령이 주기적으로 “원격과 동기화”를 요청할 경우 git fetch && git reset --hard origin/main이 실행될 수 있다고 설명
확인 방법으로는
grep -r "reset --hard" ~/.claude/projects/ 로 세션 로그 검색
claude --debug-file /tmp/debug.txt --dangerously-skip-permissions 실행 후 10분 대기, grep -i bash /tmp/debug.txt | grep reset 검색
Claude Code의 fileHistory 기능은 git과 무관하며, 내부적으로 git reset을 호출하지 않음
최종 결론
2026년 3월 30일 업데이트에서 문제의 근본 원인은 Claude Code가 아닌 사용자의 별도 로컬 도구로 확인됨
해당 도구가 GitPython을 사용해 10분마다 하드 리셋을 수행했으며, Claude Code와 동일한 디렉터리를 감시하고 있었음