GN⁺: 오우 쉿, Git? 책 출간
(ohshitgit.com)-
Git 문제 해결 방법
- Git은 복잡하고 실수하기 쉬운 도구로, 문제를 해결하는 방법을 찾는 것이 어렵다는 점을 강조함.
- 여러 가지 문제 상황과 그 해결 방법을 간단한 영어로 설명함.
-
문제 상황과 해결 방법
-
잘못된 작업을 되돌리고 싶을 때
-
git reflog
를 사용하여 이전 작업 목록을 확인하고,git reset HEAD@{index}
로 원하는 시점으로 되돌림.
-
-
커밋 후 작은 변경이 필요할 때
- 변경 후
git add .
및git commit --amend --no-edit
를 사용하여 마지막 커밋에 변경 사항을 추가함. - 주의: 공개된 커밋은 수정하지 않음.
- 변경 후
-
마지막 커밋 메시지를 변경하고 싶을 때
-
git commit --amend
를 사용하여 메시지를 변경함.
-
-
잘못된 브랜치에 커밋했을 때
- 새로운 브랜치를 생성하고
git reset HEAD~ --hard
로 마스터 브랜치에서 커밋을 제거한 후, 새로운 브랜치로 이동하여 커밋을 보존함.
- 새로운 브랜치를 생성하고
-
diff 명령어가 작동하지 않을 때
-
git diff --staged
를 사용하여 스테이징된 파일의 차이를 확인함.
-
-
이전 커밋을 되돌리고 싶을 때
-
git log
로 커밋을 찾고,git revert [saved hash]
를 사용하여 해당 커밋을 되돌림.
-
-
파일 변경을 되돌리고 싶을 때
-
git log
로 이전 커밋을 찾고,git checkout [saved hash] -- path/to/file
로 파일을 되돌림.
-
-
-
기타
-
레포지토리를 초기 상태로 되돌리고 싶을 때
-
git fetch origin
,git checkout master
,git reset --hard origin/master
를 사용하여 원격 레포지토리와 동기화함. -
git clean -d --force
로 추적되지 않은 파일과 디렉토리를 삭제함.
-
-
레포지토리를 초기 상태로 되돌리고 싶을 때
-
주의사항
- 이 사이트는 포괄적인 참고 자료가 아니며, 다양한 방법이 존재할 수 있음을 언급함.
- 번역에 참여한 여러 사람들에게 감사의 인사를 전함.
Hacker News 의견
-
git switch
를git checkout
대신 사용하는 것이 좋음 -
reset --hard
를 피하고, 잘못된 브랜치에 커밋했을 때 새로운 브랜치를 생성하여 문제를 해결하는 방법 제안- 현재 상태에서 새로운 브랜치 생성
- 이전 커밋으로 전환
- master 브랜치를 해당 커밋으로 덮어쓰기
- 작업 브랜치로 전환
-
cherry-pick
을 사용하여 잘못된 브랜치에 커밋한 경우 해결 방법 제안- 올바른 브랜치로 전환
- master의 마지막 커밋 가져오기
- master에서 삭제
- "포기" 상황에서의 git 사용 방법 제안
- origin의 최신 상태 가져오기
- 추적된 파일 복원
- 추적되지 않은 파일 및 디렉토리 삭제
- master를 원격 버전으로 재설정
- Git 학습에 UI를 기본으로 추천하는 것이 좋음
- CLI가 더 빠르다고 느끼면 나중에 사용 가능
- 시각적으로 트리와 상호작용하는 방법을 먼저 이해해야 함
- hg+mercurial에 대한 검색 결과가 있어 기쁨
- hg가 dvcs 전쟁에서 패배한 것이 아쉬움
- Git 명령어의 인자를 기억하기 어려움
- 명령어가 발견 가능하거나 쉽게 기억할 수 있는 것이 아님
- 2025년 4월에 git의 20주년을 기념할 때 이상하게 느껴질 것임
- GitHub 효과가 새로운 VCS의 필요성을 없앴을지도 모름
- "Oh shit" 상황에서 로컬 저장소를 삭제하고 다시 클론하는 방법을 사용함
- 95%의 경우 잘 작동함
-
git reflog
를 "re-flog"로 잘못 인식하여 기억하기 어려움 - Git 사용자가 아니지만, "git commit"이 무의미하다고 느낌
- 커밋이 푸시되거나 병합될 때만 중요함
- Git의 장점 중 하나는 객체를 생성한 이상 작업을 잃을 수 없다는 것임
- 자주 커밋하는 것이 중요함