Git detached HEAD: 떠나기 전에 커밋 보존하기
각 블록은 다른 경우이며 하나의 실행 스크립트가 아닙니다. 저장소에 맞는 경우를 선택하고 브랜치 이름, 경로와 VERIFIED_COMMIT을 바꾸세요. 중단 명령은 해당 작업이 진행 중일 때만 사용하며 두 대안을 모두 실행하지 마세요.
핵심 답변
detached HEAD에서는 HEAD가 로컬 브랜치를 따르지 않고 커밋을 직접 가리킵니다. 조회, 빌드와 커밋이 가능합니다. 새 작업을 유지하려면 떠나기 전에 현재 커밋에 브랜치를 만드세요. 이 상태 자체가 손실은 아니며 새 커밋을 지속적인 참조 없이 남기는 것이 위험입니다.
예시와 전제 조건
이전 버전을 임시로 체크아웃한 뒤 만든 커밋 두 개를 수정 브랜치로 보존하는 예시입니다. 진행 중인 rebase나 의도적으로 분리된 submodule과는 다릅니다. status를 읽고 활성 작업이 있다면 명확히 끝내거나 중단한 다음 이 절차를 사용합니다.
변경 전에 상태 확인
일반적인 분리 상태에서는 branch --show-current가 비어 있습니다. status가 상태를 설명하고 log가 현재 이력을 보여 줍니다. HEAD ID를 적으세요. 빈 이름이 브랜치가 없거나 파일이 추적되지 않는다는 뜻은 아닙니다. 참조와 작업 파일은 다른 질문에 답합니다.
git status
git branch --show-current
git log -3 --oneline
git rev-parse HEAD참조나 별도 체크아웃 보존
원하는 커밋에 있을 때 switch -c로 rescue/detached를 만드세요. 그 이력은 유지되지만 스테이지하지 않은 편집이 커밋되지는 않습니다. 필요한 편집은 별도로 검토하고 저장합니다. 기존 브랜치를 강제 대체하지 말고 새 이름을 사용하세요.
git switch -c rescue/detached
git branch --show-current첫 번째 절차
브랜치 이름, 커밋과 패치를 확인합니다. 그곳에서 계속 작업하거나 merge 또는 cherry-pick으로 수정 사항을 통합할 수 있습니다. cherry-pick은 변경을 새 커밋에 복사하고 merge는 이력을 연결합니다. 목적에 맞게 선택하고 검토하세요. 분리 상태를 벗어나기만 위해 push할 필요는 없습니다.
git log -3 --oneline --decorate
git show --stat HEAD다른 결과를 의도적으로 선택
이미 떠났다면 로컬 reflog와 후보의 show를 확인합니다. 패치와 부모가 맞는 ID에 rescue/recovered를 만드세요. VERIFIED_COMMIT은 확인한 ID로 바꾸는 표시입니다. 뒤이은 작업에 따라 해당 항목이 바뀌므로 HEAD@{1}이 항상 잃은 커밋은 아닙니다.
git reflog --date=iso
git show VERIFIED_COMMIT
git branch rescue/recovered VERIFIED_COMMIT제한과 예외
reflog는 로컬 참조 이동 기록이지 원격 보관소가 아닙니다. 항목과 도달 불가능한 객체는 만료되거나 정리될 수 있습니다. 미커밋 편집은 커밋으로 기록되지 않았습니다. 편집기 백업이나 확인한 stash 등 손실 이전의 복사를 찾고 reflog로 임의의 파일 내용을 재생성할 수 있다고 약속하지 마세요.
충돌과 정리
submodule은 부모가 고정한 커밋을 사용할 때 detached HEAD인 경우가 흔하며 정상입니다. 자식 저장소를 개발하려면 그 안에 자체 브랜치를 만들고 해당 기여 절차를 따르세요. 부모의 브랜치가 자식 커밋에 자동으로 이름을 붙이지 않습니다. 참조와 이력은 저장소별로 다릅니다.
결과 확인
구조 브랜치를 삭제하기 전에 다른 지속 브랜치나 검토한 병합이 원하는 커밋에 도달하는지 확인합니다. 대상 상태와 패치를 검토하고 검토 중에는 참조를 유지하세요. 브랜치 이름은 커밋 이력의 손잡이이지 모든 파일의 두 번째 물리 백업이나 검사 통과 증거가 아닙니다.
git log --oneline --decorate rescue/detached
git status --short자주 묻는 질문
오류인가요? 커밋, 태그나 고정 submodule을 의도적으로 확인한다면 아닙니다. 커밋할 수 있나요? 가능하지만 떠나기 전에 보존할 이력에 이름을 주세요. 나중에 복구할 수 있나요? 객체와 로컬 증거가 남아 있을 때 가능할 수 있으며 영구 보관을 보장하지는 않습니다.
FluxGit에서 작업 검토
FluxGit의 시각적 이력과 변경 보기로 작업과 관련 커밋을 검토하세요. 이 예시의 브랜치, 공유 여부와 로컬 파일 검사를 유지합니다. 다운로드 페이지에서 현재 제공되는 빌드와 플랫폼을 확인할 수 있습니다.