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이 실행될 수 있다고 설명
  • 확인 방법으로는
    1. grep -r "reset --hard" ~/.claude/projects/ 로 세션 로그 검색
    2. 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와 동일한 디렉터리를 감시하고 있었음
  • 이슈는 “not planned” 상태로 종료되었고, 제목이 “Claude Code가 리셋을 실행한다”에서 “내 자동화 도구가 리셋을 실행한다”로 수정됨

임시 해결책

  • git worktree 사용 시 리셋 영향 없음
  • 자주 커밋하여 변경사항을 보호 가능

관련 이슈

  • #8072 — 코드 수정이 반복적으로 되돌려지는 문제
  • #7232 — 승인 없이 git reset --hard 실행으로 데이터 손실 발생
  • #32793 — claude install 명령이 git remote URL을 잘못 변경하는 문제 (유사하지만 별개 사례)
Read Entire Article