본문 바로가기

직접 만든 소프트웨어, 두 가지 개발 기록

구현 구조와 적용 범위, 확인한 기능과 남은 한계를 함께 기록합니다.

소프트웨어개발

Git 과거 로그가 짧게 보일 때: shallow clone 여부부터 확인

by 아빠띠띠뽀 2026. 10. 29.

CI나 새 복제본에서 과거 커밋이 보이지 않으면 먼저 shallow clone 여부를 확인하세요. 이력을 일부만 내려받은 상황은 커밋을 잃어버린 상황과 다르므로, 복구 명령보다 저장소와 조회 범위를 먼저 구분해야 합니다.

적용 환경: Git의 --is-shallow-repository 옵션을 지원하는 로컬 저장소 또는 CI 체크아웃; 명령은 그 저장소 디렉터리에서 실행. 자료 확인일: 2026-10-28. 공식 문서와 별도 임시 저장소 시험을 구분해 안내합니다. 실제 운영·외부 원격 저장소에서 실행한 결과가 아닙니다.

1. 원인: clone 깊이가 이력 탐색을 제한한다

git clone --depth는 지정한 커밋 수로 이력을 제한하는 얕은 복제를 만듭니다. 기본적으로 단일 브랜치 복제를 함께 뜻하므로, 서버에 존재하는 과거 이력이나 다른 브랜치가 로컬 로그에 모두 보인다고 가정하면 안 됩니다.

반대로 일반 저장소에서 브랜치나 경로 필터를 좁혀 본 경우도 있습니다. 로그가 짧다는 증상 하나로 shallow 상태를 단정하지 않고, CI 체크아웃 설정과 실제 저장소 조회를 함께 봅니다.

2. 해결: 저장소·얕은 복제·로그 범위를 조회

다음은 로컬 상태를 읽는 명령입니다. 저장소 안에서 실행하며 출력 경로와 커밋 메시지에 사내 정보가 있으면 공유 전 가립니다.

git --version
git rev-parse --show-toplevel
git rev-parse --is-shallow-repository
git log --oneline -n 10
git branch --all
결과 읽을 의미
shallow 조회 true 깊이 제한을 먼저 조사
shallow 조회 false 브랜치·경로·참조 범위 조사
로컬 브랜치만 적음 원격 추적 범위와 CI 설정 대조
로컬에서 만든 커밋을 잃음 별도 reflog 보존 절차 검토

격리된 로컬 시험에서 확인한 결과

2026-10-28 06:59 KST, macOS의 Git 2.50.1(Apple Git-155)로 별도 임시 저장소에 직접 만든 커밋 세 개를 저장했습니다. 이를 file:// 전송과 --depth 1로 새 폴더에 복제했을 때 --is-shallow-repository는 true, git rev-list --count HEAD는 1을 출력했고 git log --oneline에는 마지막 example-3 커밋 하나만 나타났습니다.

이는 깊이를 제한한 복제본에서 로컬 조회 이력이 짧아지는 현상을 확인한 시험입니다. 외부 저장소·운영 파일은 변경하지 않았으며 추가 fetch로 깊이를 늘리는 시험은 수행하지 않았습니다. 실제 CI의 인증·refspec·체크아웃 동작은 해당 환경에서 별도로 확인해야 합니다.

3. 확인: 필요한 이력을 명시하고 취득 범위를 정한다

원하는 것이 직전 몇 커밋의 변경 비교인지, 특정 릴리스 태그인지, 모든 과거 이력인지 먼저 적으세요. CI 설정에 depth·branch·tag 제한이 있는지 확인하고 필요한 참조와 깊이를 담당자에게 전달합니다. 이력이 부족하다는 이유만으로 모든 작업에 전체 복제를 강제할 필요는 없습니다.

추가 fetch는 네트워크 사용과 로컬 참조 갱신을 수반합니다. 실제 원격과 권한을 확인한 후 필요한 범위만 취득하고, 다시 shallow 상태 및 대상 커밋의 조회 가능 여부를 확인하세요. 이 글의 조회 명령만으로 원격 이력을 추가로 받거나 복구를 완료하지는 않습니다.

4. 주의와 FAQ

reflog로 서버의 옛 커밋을 모두 볼 수 있나요? reflog는 로컬 참조 이동 기록을 조사하는 용도입니다. 애초 받지 않은 원격 이력을 자동으로 제공하지 않습니다. 직접 만든 커밋을 잃은 경우와 구분하세요.

shallow가 false면 서버와 완전히 같은가요? 아닙니다. 브랜치·태그·refspec·조회한 경로의 범위가 다를 수 있습니다. false는 얕은 저장소가 아니라는 상태이며 모든 참조의 최신 동기화를 보장하지 않습니다.

공식 출처와 관련 글

Git clone의 depth와 single-branch 조건

Git 저장소·shallow 상태 조회

직접 만든 커밋을 잃었을 때 reflog 확인

 

Git 커밋을 잃어버렸을 때: reflog 확인 후 복구 브랜치부터 만드는 순서

reset이나 rebase 뒤 커밋이 보이지 않으면 먼저 로컬 reflog에서 후보를 찾고 내용을 확인하세요. 바로 reset --hard를 실행하기보다 새 복구 브랜치를 만들어 후보 커밋을 보존하는 편이 현재 작업을

papa-titipo.com

저장된 기록과 내려받은 작업 자료를 나누어 살피는 개념 그림
직접 생성한 개념 이미지입니다. 실제 서비스 화면이나 구축·성능 시험 결과가 아닙니다.