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

# 스테이징 & 커밋

> 변경사항 스테이징과 커밋 기본 흐름

변경한 내용을 골라 스테이지하고, 메시지를 적어 커밋하는 가장 기본적인 작업 흐름입니다. ParalleLane은 파일·변경 덩어리(헝크)·논리적 한 줄 단위로 변경을 나눌 수 있어 커밋을 깔끔하게 구성할 수 있습니다.

## 워킹 카피 열기

커밋되지 않은 변경은 **워킹 카피(Working copy)** 패널에서 다룹니다. 여는 방법은 세 가지입니다.

<CardGroup cols={3}>
  <Card title="그래프의 가상 행" icon="git-commit-horizontal">
    변경사항이 있으면 커밋 그래프 맨 위에 **"커밋되지 않은 변경(Uncommitted changes)"** 행이 나타납니다. 이 행을 클릭하세요.
  </Card>

  <Card title="오른쪽 사이드바" icon="panel-right">
    오른쪽 사이드바의 **워킹 카피** 요약을 열면 됩니다. 변경이 없으면 "변경 없음"으로 표시됩니다.
  </Card>

  <Card title="단축키" icon="keyboard">
    워크트리를 선택한 상태에서 `Cmd`/`Ctrl` + `Shift` + `C` 로 워킹 카피로 전환합니다. 텍스트 입력란에 커서가 있을 때는 동작하지 않습니다.
  </Card>
</CardGroup>

패널은 변경 파일을 상태별 섹션으로 나눠 보여줍니다.

* **충돌 파일(Conflicted)** — 병합 중 충돌이 난 파일. 있을 때만 맨 위에 나타납니다.
* **스테이지 안됨(Unstaged)** — 아직 커밋 대상이 아닌 변경. Git이 추적하지 않는 새 파일도 이 섹션에 초록 `+` 배지로 함께 표시됩니다.
* **스테이지됨(Staged)** — 다음 커밋에 포함될 변경

스테이지 안됨 섹션 헤더 오른쪽에는 **스테이지(Stage)** 버튼, 스테이지됨 섹션 헤더 오른쪽에는 **스테이지 해제(Unstage)** 버튼이 있습니다. 이 버튼은 그 섹션에서 **선택한 파일**에 적용되며, 선택이 없으면 비활성화됩니다. 충돌 파일 섹션에는 이 버튼이 없습니다.

<Note>
  한 파일이 스테이지됨과 스테이지 안됨 양쪽에 동시에 나타날 수 있습니다. 파일 안의 일부만 스테이지한 경우입니다.
</Note>

<Frame>
  <img src="https://mintcdn.com/railgit/1HhHpeGsA-i8McQ3/images/basics-working-copy.png?fit=max&auto=format&n=1HhHpeGsA-i8McQ3&q=85&s=79c307634e3fcca7b4cb8d92bda5eadd" alt="왼쪽에 커밋 그래프, 오른쪽에 워킹 카피 패널이 열린 화면. 워킹 카피에는 파일 8개가 있는 UNSTAGED 섹션과 2개가 있는 STAGED 섹션이 있고, UNSTAGED 안의 새 파일 notes/reconciliation-draft.md만 초록 + 배지로 구분된다" width="2386" height="1784" data-path="images/basics-working-copy.png" />
</Frame>

## 목록과 트리 보기

파일 목록 위의 보기 전환 버튼으로 상태별 파일을 두 방식으로 볼 수 있습니다.

<CardGroup cols={2}>
  <Card title="목록 보기" icon="list">
    전체 경로를 한 행에 표시합니다. 파일 수가 적거나 경로를 빠르게 검색할 때 편합니다.
  </Card>

  <Card title="트리 보기" icon="folder-tree">
    폴더 계층으로 묶어 표시합니다. 폴더를 접고 펼칠 수 있고 `←`/`→` 키로 계층을 이동할 수 있습니다.
  </Card>
</CardGroup>

보기 방식과 접어 둔 폴더는 다시 열었을 때도 유지됩니다.

## 파일 단위로 스테이지하기

<Steps>
  <Step title="파일 확인">
    스테이지 안됨 섹션에서 커밋할 파일을 찾습니다. 파일을 클릭하면 가운데에 변경 내용(diff) 탭이 열립니다.
  </Step>

  <Step title="스테이지 / 스테이지 해제">
    파일을 선택한 뒤 섹션 헤더의 **스테이지(Stage)** 버튼으로 커밋 대상에 넣고, 스테이지됨 섹션에서는 **스테이지 해제(Unstage)** 버튼으로 다시 빼냅니다. `Shift` 클릭이나 `Cmd`/`Ctrl` 클릭으로 여러 파일을 선택하면 선택 전체에 한 번에 적용됩니다. 파일 행에 마우스를 올렸을 때 나타나는 **×** 버튼은 스테이지가 아니라 변경 버리기(Discard)입니다.
  </Step>

  <Step title="즉시 반영">
    스테이지/해제 결과는 화면에 곧바로 반영됩니다. 파일이 섹션 사이를 즉시 이동합니다.
  </Step>
</Steps>

<Tip>
  버튼을 누르면 UI가 낙관적으로(optimistic) 먼저 갱신되고, 실제 Git 상태를 다시 읽어 확정합니다. 그래서 큰 리포지토리에서도 반응이 빠릅니다.
</Tip>

### 키보드로 스테이지하기

워킹 카피 패널에 포커스가 있을 때는 마우스 없이도 처리할 수 있습니다.

| 단축키                | 하는 일                    |
| ------------------ | ----------------------- |
| `Cmd`/`Ctrl` + `S` | 선택한 파일을 스테이지            |
| `Cmd`/`Ctrl` + `U` | 선택한 파일을 스테이지 해제         |
| `Space`            | 선택한 파일의 스테이지 상태를 반대로 전환 |

스테이지는 스테이지 안됨 섹션, 스테이지 해제는 스테이지됨 섹션에서 파일이 선택돼 있을 때만 동작합니다. 폴더만 선택했거나 충돌 섹션을 선택했을 때, 그리고 커밋 메시지 입력란에 커서가 있을 때는 실행되지 않습니다(`Cmd`/`Ctrl` + `Enter` 커밋만 입력 중에도 동작합니다).

<Tip>
  표의 값은 **기본값**입니다. **설정 → ParalleLane → 단축키(Shortcuts)** 에서 다른 키로 바꿀 수 있고, 이미 쓰이는 키나 시스템이 예약한 키를 고르면 그 자리에서 알려줍니다. 이 단축키들은 단축키 목록에서 "워킹카피" 카테고리(앱 표기 그대로)에 모여 있습니다. 자세한 내용은 [단축키 & 탐색](/settings/keyboard-shortcuts) 문서를 참고하세요.
</Tip>

## 헝크·라인 단위로 스테이지하기

파일 전체가 아니라 **변경 덩어리 또는 논리적 한 줄**만 골라 스테이지할 수 있습니다. 파일을 클릭해 워킹 카피 diff를 엽니다.

<Steps>
  <Step title="변경 구간 확인">
    연속된 변경 덩어리 하나가 한 섹션입니다. 섹션 액션 버튼은 평소에는 숨어 있고, 그 섹션의 아무 행에 **마우스를 올리거나** 버튼이 키보드 포커스를 받으면 섹션 첫 행 오른쪽에 나타납니다. 통합 보기와 분할 보기 모두 동일하며, 분할 보기에서는 좌우 어느 쪽에 마우스를 올려도 나타나되 버튼 자체는 항상 오른쪽(현재) 패널에 표시됩니다.
  </Step>

  <Step title="헝크 Stage / Unstage">
    스테이지 안됨 diff에서는 **Stage**, 스테이지됨 diff에서는 **Unstage**를 누릅니다. 스테이지하지 않은 헝크에는 **Discard**도 표시됩니다. 파일 목록의 섹션 헤더 버튼은 한국어(스테이지 / 스테이지 해제)지만, 헝크 버튼은 한국어 UI에서도 **Stage** · **Unstage** · **Discard** 영문으로 표시됩니다.
  </Step>

  <Step title="한 줄만 적용 (선택)">
    지원되는 변경 줄에 마우스를 올리면 줄번호 옆 여백에 작은 아이콘 버튼이 나타납니다. 툴팁은 스테이지 안됨 diff에서 **줄 스테이지(Stage line)**, 스테이지됨 diff에서 **줄 언스테이지(Unstage line)** 입니다. `-old`와 `+new`가 한 수정으로 짝지어진 경우에는 두 행이 하나의 논리적 변경으로 함께 적용됩니다.
  </Step>
</Steps>

아래 두 캡처는 마우스를 올리지 않은 상태여서 섹션·라인 액션 버튼이 모두 숨어 있습니다. 헝크 위에 마우스를 올리면 섹션 버튼은 첫 행 오른쪽에, 라인 버튼은 그 행의 줄번호 옆에 나타납니다.

<Frame>
  <img src="https://mintcdn.com/railgit/1HhHpeGsA-i8McQ3/images/basics-stage-hunk.png?fit=max&auto=format&n=1HhHpeGsA-i8McQ3&q=85&s=948553cf9de606e855e290613d5ee610" alt="스테이지하지 않은 워킹 카피 diff. 워크플로 YAML의 한 헝크에서 runs-on 한 줄이 빨강(−)으로 지워지고 strategy·matrix·target·runs-on 네 줄이 초록(+)으로 추가됐다" width="1726" height="1634" data-path="images/basics-stage-hunk.png" />
</Frame>

<Frame>
  <img src="https://mintcdn.com/railgit/1HhHpeGsA-i8McQ3/images/basics-stage-line.png?fit=max&auto=format&n=1HhHpeGsA-i8McQ3&q=85&s=3f2aee3dc99a2c2ff9c601427d011a66" alt="이미 스테이지한 워킹 카피 diff. Rust 파일의 기존 함수 아래에 상수 선언 두 줄이 초록(+)으로 추가된 작은 헝크가 보인다" width="1726" height="1634" data-path="images/basics-stage-line.png" />
</Frame>

<Note>
  라인 액션은 HEAD·index·작업 트리에 모두 존재하는 **수정된 텍스트 파일**의 워킹 카피 diff에서만 제공됩니다. 새 파일, 삭제·이름 변경, 충돌, 바이너리·LFS 파일에서는 라인 액션이 나타나지 않습니다. **공백 변경 무시**를 켜면 라인 액션과 헝크 액션이 함께 사라지므로(표시된 diff와 실제 패치의 헝크 번호가 어긋날 수 있어서) 파일 단위로 처리하세요. 라인 단위 Discard는 제공하지 않습니다.
</Note>

## 커밋하기

<Frame>
  <img src="https://mintcdn.com/railgit/1HhHpeGsA-i8McQ3/images/basics-commit-form.png?fit=max&auto=format&n=1HhHpeGsA-i8McQ3&q=85&s=aabe87e9cc4f2067b06a00edf95b00ef" alt="워킹 카피 패널 상단의 커밋 폼. Summary (required) 입력란, Description 입력란, Amend last commit 체크박스, 초록 Commit 버튼이 차례로 놓여 있다" width="638" height="1702" data-path="images/basics-commit-form.png" />
</Frame>

<Steps>
  <Step title="커밋 메시지 작성">
    패널 상단의 **요약(Summary)** 입력란은 필수입니다. 필요하면 아래 **설명(Description)** 에 자세한 내용을 적습니다. 요약과 설명은 한 줄 띄워 하나의 메시지로 합쳐집니다.
  </Step>

  <Step title="Commit 클릭">
    **커밋(Commit)** 버튼을 누르거나 `Cmd`/`Ctrl` + `Enter`를 입력합니다. 스테이지된 항목이 없거나 요약이 비어 있으면 실행되지 않습니다.
  </Step>

  <Step title="결과 확인">
    커밋이 성공하면 그래프가 새로 그려지고 새 커밋이 선택됩니다. 워킹 카피가 깨끗해지면 "커밋되지 않은 변경" 행은 자동으로 사라집니다.
  </Step>
</Steps>

<Warning>
  커밋에는 **스테이지된 변경만** 포함됩니다. 스테이지 안 한 변경은 그대로 남습니다. pre-commit 같은 Git hook이 설정돼 있으면 커밋 시 자동 실행되며, hook이 거부하면 커밋이 실패합니다.
</Warning>
