LabHub
배우기 러닝패스 코스

Git 실전 · 토큰이 이력에 들어갔다 · 실습

토큰이 이력에 들어갔다 — 지웠는데도 나온다

LabHub 에서 이어서 보기

목표

이력에서 비밀 파일과 큰 파일을 실제로 들어냅니다. 그리고 들어낸 뒤에도 남는 것이
무엇인지까지 확인합니다.

왜 중요한가

git 은 내용 주소 저장소입니다. 파일 하나하나가 blob 객체가 되고, 그 blob 을 가리키는
트리와 커밋이 남아 있는 한 객체는 살아 있습니다. 그래서 git rm 은 "앞으로 없다" 는
뜻일 뿐 "없었던 일" 이 아닙니다. 비밀이 들어갔을 때 이 차이를 모르면, 지우고 커밋한
뒤 안심한 채로 토큰을 계속 쓰게 됩니다. 이 실습은 그 차이를 명령 출력으로 보여 주고,
실제로 없애는 순서(재작성 → 백업 참조 제거 → reflog 만료 → gc)를 손에 익힙니다.
마지막 단계가 결론입니다 — 이미 퍼진 사본에는 그대로 남으므로, 비밀은 청소가 아니라
폐기가 먼저입니다.

단계

1. /root/gitx6/repo 에 토큰 파일과 900KB 덩어리가 섞인 이력을 만들고, 워킹 트리에서
지우는 커밋까지 넣습니다.
2. 동료 사본 /root/gitx6/peer 를 떠 두고, 지금 상태를 notes/before.txt 에 남깁니다.
3. git filter-branch 로 모든 ref 를 재작성합니다.
4. 아직 객체가 남아 있는 이유를 notes/original.txt 에 적고 그 참조를 걷어냅니다.
5. reflog 를 만료하고 gc --prune=now 로 실제로 지운 뒤 크기를 notes/after.txt
남깁니다.
6. 해시가 전부 바뀐 사실을 notes/rewrite.txt 에 남깁니다.
7. /root/gitx6/peer 를 새 이력으로 따라가게 하고, 그 사본에 비밀이 남아 있는지를
notes/collab.txt 에 적습니다.
8. notes/report.md 에 사고 대응 순서를 정리합니다.

참고

단계 8개

  1. 토큰과 큰 덩어리가 섞인 이력 만들기
  2. 지웠는데도 원문이 나온다
  3. 모든 ref 를 재작성한다
  4. 아직 하나도 안 사라졌다
  5. reflog 를 비우고 실제로 지운다
  6. 해시가 전부 바뀌었다
  7. 이미 떠 간 사본에는 그대로 있다
  8. 사고 대응 순서로 정리하기