[GitHub 100일 챌린지] Day 62 - Git Reset 실전 활용
[GitHub 100일 챌린지] Day 62 - Git Reset 실전 활용
100일 챌린지 Day 62 - 실제 시나리오에서 Git Reset을 안전하게 사용하는 방법을 실습합니다.
배울 내용
- 시나리오별 Reset 활용법
- Reset 후 복구 방법
- 공유 브랜치에서의 주의사항
1. 시나리오: 커밋 메시지 수정
1
2
3
4
5
6
7
8
9
10
11
12
# 잘못된 커밋
git commit -m "fix bug" # 너무 간단!
# Soft reset으로 되돌리기
git reset --soft HEAD~1
# 다시 커밋 (파일은 여전히 staged 상태)
git commit -m "fix: Resolve null pointer exception in UserService
- Add null check before user.getName()
- Add unit test for null user scenario
- Update error handling documentation"
2. 시나리오: 잘못된 파일 커밋
1
2
3
4
5
6
7
8
9
10
11
12
13
# 실수로 .env 파일도 커밋
git add .
git commit -m "feat: Add login feature"
# Mixed reset (기본값)
git reset HEAD~1
# .gitignore에 .env 추가
echo ".env" >> .gitignore
# 올바른 파일만 다시 커밋
git add src/ .gitignore
git commit -m "feat: Add login feature"
3. 시나리오: 실험 실패
1
2
3
4
5
6
7
8
9
10
11
# 실험적 기능 5개 커밋
git commit -m "exp 1"
git commit -m "exp 2"
git commit -m "exp 3"
git commit -m "exp 4"
git commit -m "exp 5"
# 전부 실패 → 전부 삭제
git reset --hard HEAD~5
# 깔끔하게 시작
4. 시나리오: 스테이징 실수
1
2
3
4
5
6
7
8
# 너무 많은 파일 add
git add .
# Staging만 취소 (파일은 유지)
git reset
# 또는 특정 파일만 unstage
git reset src/debug.log
5. Reset 복구하기
Reflog 활용
1
2
3
4
5
6
7
8
9
10
11
12
# Reset으로 커밋 삭제
git reset --hard HEAD~3
# 앗! 실수였다!
# Reflog 확인
git reflog
# abc1234 HEAD@{0}: reset: moving to HEAD~3
# def5678 HEAD@{1}: commit: Important work!
# 복구
git reset --hard def5678
6. 특정 커밋으로 Reset
1
2
3
4
5
6
7
8
9
# 로그 확인
git log --oneline
# def5678 커밋으로 돌아가고 싶음
# Reset
git reset --hard def5678
# 또는 브랜치 이름 사용
git reset --hard origin/main
7. 부분 Reset
1
2
3
4
5
# 특정 파일만 HEAD로 되돌리기
git reset HEAD file.js
# 특정 파일을 특정 커밋으로
git reset abc1234 -- file.js
8. 위험한 상황
❌ 절대 금지
1
2
3
4
5
6
7
8
# 이미 Push한 커밋에 Reset
git push origin main
# ... 다른 사람이 pull
git reset --hard HEAD~3 # ❌ 위험!
git push origin main --force # ❌❌ 매우 위험!
# → 다른 사람의 작업 충돌 발생
✅ 안전한 대안
1
2
3
# Push한 커밋은 Revert 사용
git revert HEAD
git push origin main
9. 체크리스트
Reset 전 확인:
- Push 여부 확인 (
git log origin/main..HEAD) - 중요한 변경사항 백업
- 브랜치 백업 생성
Reset 실행:
- 옵션 선택 (soft/mixed/hard)
- 대상 커밋 확인
- 실행 후 상태 확인 (
git status)
10. 꿀팁
1
2
3
4
5
6
7
8
# Reset 전 현재 상태 저장
git stash
# Reset 실행
git reset --hard HEAD~3
# 필요하면 다시 적용
git stash pop
정리
완료 체크:
- 시나리오별로 적절한 Reset을 사용할 수 있다
- Reflog로 Reset을 복구할 수 있다
- 공유 브랜치에서 Reset을 피할 수 있다
핵심 요약:
- 커밋 메시지 수정 → Soft
- 파일 재선택 → Mixed
- 완전 삭제 → Hard
- Reflog로 복구 가능
- Push한 커밋은 Revert 사용!
다음: Day 63 - Git Revert →
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.
