Git School · FluxGit

삭제한 Git 브랜치 복구하기

FluxGit ·

각 블록은 다른 경우이며 하나의 실행 스크립트가 아닙니다. 저장소에 맞는 경우를 선택하고 브랜치 이름, 경로와 VERIFIED_COMMIT을 바꾸세요. 중단 명령은 해당 작업이 진행 중일 때만 사용하며 두 대안을 모두 실행하지 마세요.

핵심 답변

브랜치 삭제는 참조를 없애며 커밋까지 즉시 삭제하는 것은 아닙니다. 남아 있는 마지막 커밋을 찾아 새 브랜치로 이름을 붙입니다.

예시와 전제 조건

올바른 커밋과 사용 가능한 객체가 필요합니다. 삭제 메시지에 SHA가 보이면 보관하고 작업 전에 확인하세요.

변경 전에 상태 확인

HEAD reflog와 후보 기록을 읽습니다. 브랜치 reflog는 브랜치와 함께 삭제되지만 HEAD 기록에는 관련 이동이 남을 수 있습니다.

git reflog --date=iso
git show VERIFIED_COMMIT
git log -5 --oneline VERIFIED_COMMIT

참조나 별도 체크아웃 보존

git branch rescue/deleted-branch VERIFIED_COMMIT으로 전환 없이 커밋에 이름을 붙입니다. 작업 디렉터리를 덮어쓸 필요가 없습니다.

git branch rescue/deleted-branch VERIFIED_COMMIT

첫 번째 절차

git show와 git log로 원하는 끝과 기록인지 확인합니다. 원래 이름이 비어 있으면 이후 다시 만드세요.

다른 결과를 의도적으로 선택

원격 브랜치가 있었더라도 fetch와 로컬 재생성 전에 참조가 아직 있는지 확인합니다. 과거 push가 현재 보존을 보장하지 않습니다.

제한과 예외

새 clone에는 자신의 로컬 reflog가 없습니다. reflog 만료와 객체 정리는 다른 정책이므로 복구 중에는 강제 정리를 피하세요.

git ls-remote --heads origin my-branch

충돌과 정리

참조가 없으면 git fsck --full --no-reflogs --unreachable로 남은 커밋을 찾을 수 있습니다. 명령은 원하는 브랜치를 모르므로 후보를 검토하세요.

git fsck --full --no-reflogs --unreachable

결과 확인

재생성한 브랜치의 기록과 상태를 확인합니다. 커밋 복구는 한 번도 커밋하지 않은 파일 편집을 되살리지 않습니다.

git log -5 --oneline rescue/deleted-branch
git status --short

자주 묻는 질문

잃은 이름은 백업이 아닙니다. 객체가 없다면 다른 사본, 협업자 또는 실제로 남아 있는 원격 참조를 찾으세요.

FluxGit에서 작업 검토

FluxGit은 앱 안의 브랜치 삭제를 보호할 수 있습니다. 활성화한 Ref journal은 설치된 hook이 실행될 때 참조 변경을 기록합니다. hook 우회와 다른 Git 구현은 적용 범위 밖입니다.

Git 공식 문서

Git School · 1:51

reflog로 삭제한 Git 브랜치 복구하기

최근 삭제한 로컬 브랜치의 남아 있는 커밋을 찾아 새 브랜치를 만들어 복구합니다. 테스트 저장소에서 reflog와 FluxGit의 Safety Timeline을 살펴보고, 설치된 Ref journal 훅이 Git 명령줄의 참조 변경을 기록할 수 있는 조건을 설명합니다.

reflog로 삭제한 Git 브랜치 복구하기
내레이션은 영어입니다. YouTube에서 11개 언어의 수동 자막을 사용할 수 있습니다. 이 대본은 한국어입니다.

YouTube에서 보기 — 새 탭에서 열림

테스트 저장소에서 녹화했습니다. 영어 음성과 한국어 자막입니다. 복구하려면 커밋 객체와 사용 가능한 reflog 또는 저널 기록이 남아 있어야 합니다. Ref journal은 커밋하지 않은 파일을 백업하지 않습니다.

내레이션 대본 읽기
  1. 00:03 작업이 있는 브랜치를 삭제했습니다. git branch -D로 삭제한 브랜치에는 어디에도 병합하지 않은 커밋 두 개가 있었습니다. 복구하는 방법을 알아봅니다.
  2. 00:13 FluxGit에서 브랜치가 목록에서 사라졌습니다.
  3. 00:17 작업이 사라지지 않은 이유입니다. 브랜치는 라벨입니다. git branch -D는 라벨을 제거하지만 커밋 두 개는 저장소에 남고, 이를 가리키는 브랜치는 없습니다. reflog는 아직 기억합니다. 마지막 커밋에 브랜치를 만들면 두 커밋이 모두 돌아옵니다.
  4. 00:36 Safety Timeline을 엽니다. reflog를 쉬운 문장으로 보여 줍니다.
  5. 00:44 Find a lost commit에 메시지 일부를 입력합니다. 삭제한 브랜치의 마지막 커밋 한 개가 검색됩니다.
  6. 00:52 Create branch here. 복구 브랜치가 그 커밋을 가리키고 다른 것은 움직이지 않습니다.
  7. 00:58 커밋 두 개가 그래프에 돌아왔습니다.
  8. 01:02 이 저장소의 Ref journal을 켜세요.
  9. 01:06 설치된 Git 훅이 실행되면 FluxGit은 터미널이나 에이전트 명령을 포함해 Git 명령줄에서 수행한 브랜치 삭제를 기록할 수 있습니다.
  10. 01:15 훅을 우회하거나 다른 Git 구현을 사용하는 경우는 지원 범위에 포함되지 않습니다.
  11. 01:19 커밋하지 않은 파일이 아니라 참조를 기록합니다.
  12. 01:23 복구하려면 커밋 객체가 여전히 존재해야 합니다.
  13. 01:28 터미널에서는 git reflog로 커밋을 찾고 git branch에 이전 이름과 그 커밋을 지정합니다.
  14. 01:36 요약입니다. 삭제한 브랜치는 사라진 라벨이며 reflog는 여전히 커밋을 찾습니다. 다음 수업은 AI 에이전트가 코드를 삭제한 경우입니다.

관련 절차

FluxGit 다운로드