WEBBOOK CHAPTER

현장에서 살아남는 Git: 20장 최종 실전: 금요일 배포 사고를 복구한다

20장 최종 실전: 금요일 배포 사고를 복구한다

상황은 이렇다. 금요일 오후, release/1.1에서 공지와 설정을 수정했다. 동료 변경을 받지 않고 push해 거절되었다. 서둘러 rebase하다 충돌이 났고, 중요한 공지 한 줄이 사라진 것처럼 보인다. 실제 서비스 저장소가 아니라 샌드박스에서 다음 절차를 문서화한다.

1단계 동작을 멈춘다

status, 그래프, reflog, diff를 incident/initial-state.md에 기록했다고 가정한다. 진행 중 작업 종류와 사라진 것이 tracked인지 확인한다.

2단계 안전한 탈출점을 만든다

rebase 중이고 판단이 어렵다면 git rebase --abort로 시작 전 상태로 돌아간다. 현재 커밋이 중요하면 먼저 ID를 기록한다. 정상 상태에서 backup/friday-before-sync 브랜치를 만든다.

3단계 원격을 관찰한다

git fetch origin 후 로컬과 origin/release/1.1을 그래프로 비교한다. 원격 커밋을 읽고 내 커밋이 미공유인지 확인한다.

4단계 통합 전략을 선택한다

공유 release 브랜치라면 팀 규칙에 따라 merge를 우선할 수 있다. 개인 기능 브랜치라면 최신 기반으로 rebase할 수 있다. 충돌 해결 후 파일 문법뿐 아니라 ReleaseDesk의 공지 의미를 검토한다.

5단계 증명하고 공유한다

테스트, diff --check, 최종 그래프, 원격과의 ahead/behind를 확인한다. force가 필요하다면 혼자 결정하지 않는다. 사고 기록에는 원인, 보존한 증거, 선택한 명령, 대안, 재발 방지 규칙을 남긴다.

졸업 기준

독자는 다음 질문에 명령어 없이도 먼저 답할 수 있어야 한다.

  1. 지금 변경은 어느 영역에 있는가?
  2. 이 커밋은 다른 사람이 이미 보았는가?
  3. 되돌릴 때 파일 내용과 공유 역사 중 무엇을 보존하는가?
  4. 실행 뒤 무엇으로 성공을 증명하는가?
  5. 실패하면 시작 상태로 돌아가는 명령은 무엇인가?

부록 A 증상에서 시작하는 90초 진단표

책 루트에서 npm run build를 실행하면 dist/lab/index.htmlGit 사고 진단실이 만들어진다. 이 파일을 브라우저로 열고 증상·공유 여부·보존 대상을 선택하면 첫 관찰 명령과 피해야 할 행동을 비교할 수 있다. 진단실은 명령을 대신 실행하지 않으며, 실제 저장소에서는 결과를 복사하기 전에 git status와 현재 경로를 다시 확인한다.

화면 또는 오류 첫 명령 확인할 것 피할 행동
변경 파일이 안 보임 git rev-parse --show-toplevel 다른 복제본·ignore·tracked 상태 다시 init
pull이 갈라짐 경고 git fetch ahead/behind, 팀 전략 임의 설정 복사
push rejected git fetch 원격 새 커밋 push --force
충돌 표시 git status merge/rebase/cherry-pick 종류 기호만 삭제
커밋이 사라짐 git reflog reset/rebase 전 ID 즉시 gc/clean
비밀을 커밋함 키 회전 노출 범위·공유 여부 ignore만 추가
파일 전체 diff git diff --summary 줄바꿈·권한·포매터 그대로 commit
IDE만 이상함 git status root와 executable 캐시만 반복 삭제

부록 B 명령별 탈출구

  • merge 중단: git merge --abort
  • rebase 중단: git rebase --abort
  • cherry-pick 중단: git cherry-pick --abort
  • revert 시퀀스 중단: git revert --abort
  • 스테이징 취소: git restore --staged <file>
  • 삭제 후보 미리 보기: git clean -nd
  • 잃은 커밋 탐색: git reflog

중단 명령도 현재 작업 종류가 맞을 때만 쓴다. git status가 안내하는 명령을 우선 읽는다.

부록 C 공식 자료와 버전 원칙

공식 문서는 제품 업데이트에 따라 바뀐다. 이 책은 변하기 쉬운 버튼 위치보다 Git 상태와 실행 전후 증거를 중심으로 썼다. SourceTree 화면은 운영체제와 버전에 따라 이름이 달라질 수 있고, IntelliJ 설명은 2026.2 문서 계열을 기준으로 검토했다.

부록 D 저작권·상표·보안

명령 이름과 제품 기능이라는 사실은 공식 자료로 검증하되 설명은 독자적으로 서술했다. 공식 문서 문단, 타 도서의 도표, 블로그의 명령 모음을 복제하지 않았다. 실습 저장소와 fixture는 가상의 프로젝트이며 example.invalid 주소를 사용한다. 제품 로고와 공식 UI 스크린샷을 배포물에 포함하지 않는다.

업무 저장소의 코드나 오류 로그를 외부 서비스에 올릴 때 회사 정책과 비밀정보를 먼저 확인한다. 인증 정보가 노출되면 Git 이력 수정 전에 자격 증명 회전이 우선이다. 이 책은 특정 호스팅 서비스의 보안 절차를 대신하지 않는다.