> ## Documentation Index
> Fetch the complete documentation index at: https://blog.nvim.me/llms.txt
> Use this file to discover all available pages before exploring further.

# 현재 브랜치와 변경 내용 확인하기

> git status와 branch로 현재 위치를 확인하고, diff와 diff --cached로 스테이징 전후 변경을 구분해요.

저장소 안에서 실행해요. 현재 브랜치와 미커밋 변경을 조회하며 파일 내용이나 커밋 이력은 바꾸지 않아요.

```bash theme={null}
# 현재 브랜치 이름
git branch --show-current

# 브랜치와 변경 파일을 짧게 표시
git status --short --branch

# 아직 스테이징하지 않은 변경
git diff

# 다음 커밋에 담길 변경
git diff --cached
```

## 상태의 두 칸 읽기

충돌이 없는 일반 파일에서 `git status --short`의 첫째 칸은 **현재 커밋과 스테이징 영역(index)의 차이**, 둘째 칸은 **스테이징 영역과 작업 트리(working tree)의 차이**예요. 빈칸은 해당 비교에서 변경이 없다는 뜻이에요.

| 표시 | 의미 | 내용을 볼 명령 |
| - | - | - |
| `M index.js` | 수정했지만 스테이징하지 않았어요 | `git diff` |
| `M  index.js` | 수정 내용을 스테이징했어요 | `git diff --cached` |
| `MM index.js` | 스테이징한 뒤 같은 파일을 다시 수정했어요 | 두 diff를 각각 확인 |
| `A  local-notes.txt` | 새 파일을 스테이징했어요 | `git diff --cached` |
| `?? local-notes.txt` | 아직 추적하지 않는 새 파일이에요 | 편집기에서 파일 확인 |

`MM`이면 두 명령을 모두 봐야 해요. 예를 들어 `console.log("hello");`를 `console.log("hello git");`로 바꿔 스테이징한 뒤, 파일을 `console.log("hello world");`로 다시 고쳤다면 `git diff --cached`는 `hello → hello git`, `git diff`는 `hello git → hello world`를 보여줘요.

> [!NOTE]
>
> 일반적인 `git diff`와 `git diff --cached`에는 `??` 파일의 내용이 나오지 않아요. diff가 비어 있어도 새 파일이 있을 수 있으니 `git status`를 함께 확인해요. 충돌 중의 두 칸은 위 표와 의미가 다르므로 `git status`의 충돌 안내를 읽어요.

## 관련 옵션과 명령

경로를 지정하는 예시는 저장소 루트에서 실행해요. `--` 뒤의 `index.js`는 확인할 파일 경로로 바꿔요.

| 목적 | 명령 | 참고 |
| - | - | - |
| 설명을 포함한 상태 확인 | `git status` | 스테이징·미스테이징·미추적 파일을 구분해요 |
| 특정 파일의 미스테이징 변경 | `git diff -- index.js` | 스테이징 영역과 작업 파일 비교 |
| 특정 파일의 스테이징 변경 | `git diff --cached -- index.js` | 현재 커밋과 스테이징 영역 비교 |
| 스테이징 변경의 다른 표기 | `git diff --staged` | `--cached`와 같아요 |
| 현재 커밋과 작업 파일 비교 | `git diff HEAD` | 스테이징 경계를 나누지 않은 최종 차이예요. 첫 커밋이 필요해요 |
| 변경 파일명만 확인 | `git diff --name-only` | 스테이징한 파일명은 `git diff --cached --name-only` |
| 파일별 변경량 요약 | `git diff --stat` | 스테이징한 변경량은 `git diff --cached --stat` |
| 미추적 파일을 개별 표시 | `git status --short --untracked-files=all` | 미추적 디렉터리 안의 파일도 펼쳐요 |
| 제외한 파일도 표시 | `git status --short --ignored` | 제외된 파일·디렉터리는 `!!`로 표시해요 |

`git diff HEAD`도 미추적 파일의 내용은 보여주지 않아요. 중간에 스테이징한 내용이 있어도 작업 파일이 현재 커밋과 같으면 출력이 비어 있을 수 있어요. 커밋 직전 확인에는 `git diff --cached`를 사용해요.

## 브랜치 이름이 비어 있거나 결과가 예상과 다르면

* **브랜치 이름이 비어요:** detached HEAD에서는 `git branch --show-current`가 아무것도 출력하지 않아요. `git status`로 상태를 확인하고 `git rev-parse --short HEAD`로 현재 커밋을 조회해요. 조회만 한다면 브랜치를 전환할 필요는 없어요.
* **`git diff`가 비어요:** 이미 스테이징했을 수 있어요. `git diff --cached`와 `git status`를 확인해요.
* **새 파일이 상태에 안 보여요:** `git status --short --untracked-files=all`로 다시 보고, 제외 규칙은 `git status --short --ignored`로 확인해요.
* **`git diff HEAD`에서 `unknown revision` 오류가 나요:** `git status`에서 첫 커밋이 없는지 확인해요. 첫 커밋 전에도 `git diff --cached`로 스테이징한 새 파일을 볼 수 있어요.
* **`not a git repository`:** 확인할 저장소 폴더로 이동해요.

## 관련 글

* [작업 트리, 스테이징 영역, 커밋은 어떻게 다를까요?](https://blog.nvim.me/git/learn/working-tree-index-and-commit.md) — 두 diff가 비교하는 대상
* [.gitignore에 적었는데 왜 계속 보일까요?](https://blog.nvim.me/git/learn/tracked-files-and-gitignore.md) — 추적 여부와 제외 규칙
* [현재 커밋 해시 확인하기](https://blog.nvim.me/git/how-to/check-current-commit-hash.md) — 전체·축약 해시 조회

명령과 출력 해석의 근거는 Git 공식 문서의 [git status](https://git-scm.com/docs/git-status), [git branch](https://git-scm.com/docs/git-branch), [git diff](https://git-scm.com/docs/git-diff)예요.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.