## 유용한 `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`을 더 능숙하게 다룰 수 있도록, 한 번 직접 실험해 보세요! 🚀