## 유용한 `Git` 숨은 명령어 - `Git`을 사용할 때 `git commit`, `git push`, `git pull` 같은 기본 명령어는 자주 쓰이지만, 상대적으로 덜 알려진 강력한 기능들이 많이 있습니다. - 특정 커밋을 되돌리거나, 여러 개의 작업 디렉토리를 관리하거나, 손쉽게 버그를 추적할 수 있는 명령어들이 존재합니다. - 이번 글에서는 **`Git`의 숨은 명령어 10가지** 를 소개해 드리겠습니다. <br /> --- ### 1. `git bisect` – 버그가 발생한 커밋 찾기 - **버그가 어느 커밋에서 발생했는지 자동으로 찾아주는 이진 탐색 명령어** - > sh ``` git bisect start git bisect bad # 현재 커밋이 버그가 있는 경우 git bisect good <커밋 해시> # 정상 동작했던 마지막 커밋 ``` - `Git`이 자동으로 중간 커밋을 체크아웃하며, 버그 여부를 판단하면서 좁혀 나갑니다. - **종료 시**: - > sh ```sh git bisect reset ``` <br /> --- ### 2. `git reflog` – 사라진 커밋을 복구 - **`Git`의 로컬 변경 이력을 추적 (브랜치 이동, 리베이스, 리셋 등을 복구할 때 유용)** - > sh ``` git reflog ``` - 예: 최근 5개의 `HEAD` 이동 이력 확인 - > sh ``` git reflog -n 5 ``` <br /> --- ### 3. `git worktree` – 하나의 저장소에서 여러 개의 작업 디렉토리 사용 - **여러 브랜치를 동시에 작업할 때 매우 유용한 명령어** - 사용법: - > sh ``` git worktree add ../new-branch-dir new-branch ``` - `../new-branch-dir`에 `new-branch` 브랜치의 새로운 작업 디렉토리가 생성됨. <br /> --- ### 4. `git cherry-pick -n` – 특정 커밋을 가져오되 바로 커밋하지 않기 - **특정 커밋의 변경 사항을 적용하되, 바로 커밋하지 않음** - > sh ``` git cherry-pick -n <커밋 해시> git status # 변경 내용 확인 후 직접 수정 가능 ``` <br /> --- ### 5. `git replace` – 특정 커밋을 다른 커밋으로 대체 - **과거의 커밋을 임시로 다른 커밋으로 바꿔치기할 수 있음** - > sh ``` git replace <올드 커밋> <새 커밋> ``` - 예: 기존 커밋을 다른 커밋으로 보이게 설정 - > sh ``` git replace abc123 def456 ``` <br /> --- ### 6. `git archive` – 특정 버전의 파일을 압축해서 내보내기 - **`Git` 저장소의 특정 버전을 `ZIP` 또는 `tar` 파일로 압축** - > sh ``` git archive -o release.zip HEAD ``` - 특정 브랜치 기준으로 압축 - > sh ``` git archive -o feature.zip feature-branch ``` <br /> --- ### 7. `git blame -C -C` – 파일 이동까지 추적하는 변경 기록 조회 - **파일 이동까지 추적하여, 코드 변경 기록을 분석하는 명령어** - > sh ``` git blame -C -C file.txt ``` <br /> --- ### 8. `git fsck` – `Git` 저장소의 무결성 검사 - **`Git` 저장소에 깨진 오브젝트가 있는지 확인할 때 사용** - > sh ``` git fsck ``` <br /> --- ### 9. `git stash pop --index` – 원래 스테이징 상태까지 복원 - **`stash`를 적용하면서 원래의 인덱스(스테이징 상태)까지 복원 가능** - 사용법: - > sh ```sh git stash pop --index ``` <br /> --- ### 10. `git rerere` – 같은 충돌을 반복해서 해결할 필요 없음* - **`Git`이 동일한 충돌 해결 방법을 기억해서 자동으로 해결** - 활성화: - > sh ``` git config --global rerere.enabled true ``` - 충돌 해결 후 다시 같은 충돌이 발생하면 자동 적용. <br /> --- ### **요약** - `Git`에는 우리가 자주 사용하는 명령어 외에도 **강력한 기능을 가진 숨겨진 명령어들이 많습니다.** - 특히, 위에서 소개한 명령어들은 **디버깅, 복구, 브랜치 관리, 충돌 해결** 등의 다양한 작업을 더 효율적으로 할 수 있도록 도와줍니다. - 이제 `Git`을 더 능숙하게 다룰 수 있도록, 한 번 직접 실험해 보세요! 🚀