> ## 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.

# 리베이스 & 머지

> 머지 전략·리베이스·cherry-pick·reset

머지·리베이스·cherry-pick·revert·reset은 모두 커밋 그래프에서 커밋을 **우클릭**해 실행합니다.

<Frame>
  <img src="https://mintcdn.com/railgit/1HhHpeGsA-i8McQ3/images/history-op-context-menu.png?fit=max&auto=format&n=1HhHpeGsA-i8McQ3&q=85&s=944ede74021316fbfe594c2022136a25" alt="HEAD 커밋을 우클릭해 열린 작업 메뉴 — 생성·읽기, cherry-pick, 히스토리 편집, 위험, ref 서브메뉴가 구분선으로 나뉘고 Reset 항목만 빨간색으로 표시됨" width="2906" height="1784" data-path="images/history-op-context-menu.png" />
</Frame>

## 메뉴 읽는 법

메뉴는 다섯 그룹으로 묶이고, 조건이 맞지 않는 항목과 빈 그룹은 구분선까지 함께 사라집니다.
브랜치·태그 배지가 붙은 커밋에서는 ref별 서브메뉴가 맨 마지막에 덧붙습니다.

| 그룹           | 담는 항목                                                           |
| ------------ | --------------------------------------------------------------- |
| 선택 기반        | **N개 커밋 스쿼시…** — HEAD를 포함한 연속 커밋을 골랐을 때만                        |
| 생성 · 이동 · 읽기 | **브랜치 만들기…**, **태그 만들기…**, **커밋 체크아웃**, **비교**                  |
| 통합           | **현재 브랜치에 머지…**, **현재 브랜치를 이 커밋 위로 rebase**, **Cherry-pick 커밋** |
| 히스토리 편집      | **커밋 수정 (Amend)** — HEAD 커밋에서만, **여기서부터 interactive rebase…**   |
| 위험           | **{'{'}브랜치{'}'}를 여기로 Reset…**, **커밋 되돌리기**                      |

<Note>
  빨간색이 붙는 것은 **Reset** 과 ref 서브메뉴의 **삭제** 뿐입니다.
  메뉴 규칙 전체는 [화면 둘러보기](/ko/interface-overview#컨텍스트-메뉴)에 정리돼 있습니다.
</Note>

## 머지

커밋을 우클릭하고 **현재 브랜치에 머지…** 를 선택하면 전략 선택 다이얼로그가 열립니다.
전략을 고르고 **Merge** 를 누릅니다.

<CardGroup cols={3}>
  <Card title="기본 (Default)" icon="git-merge">
    가능하면 fast-forward, 아니면 머지 커밋을 만듭니다.
  </Card>

  <Card title="No fast-forward" icon="git-merge">
    항상 머지 커밋을 만들어 합친 시점을 히스토리에 남깁니다.
  </Card>

  <Card title="Squash" icon="layers">
    커밋도 HEAD 이동도 없이 staged 상태로만 둡니다.
    직접 커밋해야 합니다.
  </Card>
</CardGroup>

결과는 토스트로 안내됩니다.

* **이미 최신** — 합칠 변경이 없어 아무것도 바뀌지 않습니다.
* **머지 완료** — fast-forward 또는 머지 커밋이 만들어졌습니다.
  이 경우에만 [Undo](/ko/basics/discard-undo)가 기록됩니다.
* **Squash 완료** — 변경이 staged 상태입니다.
  워킹 카피에서 확인하고 직접 커밋해야 끝납니다.
* **충돌** — 아래 [충돌이 나면](#충돌이-나면)을 참고하세요.

<Note>
  대상 커밋이 이미 현재 브랜치에 반영돼 있으면 머지 항목이 표시되지 않습니다.
</Note>

## 리베이스

### 브랜치/커밋 위로 리베이스

올려놓을 대상을 우클릭하고 **현재 브랜치를 이 브랜치(커밋) 위로 rebase** 를 선택한 뒤, 확인 다이얼로그에서 **Rebase** 를 누릅니다.

<Note>
  다음 두 경우에는 실행 전에 거부되고 에러 알림만 뜹니다.

  * **추적 중인 파일에 커밋되지 않은 변경이 있을 때** — 커밋하거나 스태시한 뒤 다시 시도하세요.
  * **이미 진행 중인 머지·리베이스·cherry-pick·revert가 있을 때** — 완료하거나 중단한 뒤 실행하세요.
</Note>

### Interactive 리베이스

<Steps>
  <Step title="시작 커밋 우클릭">
    편집 대상 중 가장 오래된 커밋을 우클릭하고 **여기서부터 interactive rebase…** 를 선택합니다.
    클릭한 커밋도 대상에 포함됩니다.
  </Step>

  <Step title="계획 편집">
    커밋이 오래된 것부터 나열됩니다.
    각 행에서 동작을 고르고, 왼쪽 손잡이를 드래그해 순서를 바꿉니다.

    * **Pick** — 그대로 사용
    * **메시지 수정(reword)** — 인라인으로 메시지 변경
    * **Squash** — 위 커밋에 합치기(결합 메시지 편집 가능)
    * **Fixup** — 위 커밋에 합치되 메시지는 버림
    * **삭제(drop)** — 커밋 제거

    첫 커밋은 squash/fixup 할 수 없고, 최소 한 개는 남겨야 하며, 메시지를 비울 수 없습니다.
    규칙을 어기면 다이얼로그 상단에 이유가 표시됩니다.
  </Step>

  <Step title="실행">
    **Rebase 시작** 을 누릅니다.
  </Step>
</Steps>

<Frame>
  <img src="https://mintcdn.com/railgit/1HhHpeGsA-i8McQ3/images/history-rebase-interactive.png?fit=max&auto=format&n=1HhHpeGsA-i8McQ3&q=85&s=883b2c5c30966b72cc13a5c5911f4d63" alt="Interactive Rebase 다이얼로그 — 커밋 행마다 드래그 손잡이, 동작 선택 드롭다운, 짧은 SHA와 커밋 요약이 놓여 있음" width="886" height="376" data-path="images/history-rebase-interactive.png" />
</Frame>

## Cherry-pick

커밋의 변경을 현재 브랜치 위에 새 커밋으로 적용합니다.
커밋 하나는 우클릭 → **Cherry-pick 커밋**, 여러 개는 다중 선택 후 **선택한 N개 커밋 cherry-pick** 을 누르면 오래된 커밋부터 순서대로 적용됩니다.

<Note>
  선택에 merge 커밋이 있으면 항목이 **cherry-pick 불가 — 선택에 머지 커밋 포함** 으로 바뀌며 비활성화됩니다.
  충돌이 나면 시퀀스가 멈추고, 워킹 카피에서 **계속** 하면 남은 커밋을 이어 적용하고 **중단** 하면 전체를 취소합니다.
</Note>

## Revert

커밋을 우클릭하고 **커밋 되돌리기** 를 선택하면 변경을 취소하는 새 커밋을 만듭니다.
기존 히스토리는 유지됩니다.

merge 커밋을 되돌릴 때는 **mainline 부모** 를 고르는 다이얼로그가 열립니다(기본값 부모 1). 선택한 부모의 브랜치는 유지하고 반대편 변경을 되돌립니다.

<Warning>
  mainline을 잘못 고르면 반대쪽 변경이 유지됩니다.
  어떤 부모가 merge 당시의 기준 브랜치였는지 확인하세요.
</Warning>

## Reset

우클릭 → **{'{'}브랜치{'}'}를 여기로 Reset…** 으로 현재 브랜치를 그 커밋 위치로 되돌립니다.
기본 모드는 **Mixed** 입니다.

| 모드        | 동작                           |
| --------- | ---------------------------- |
| **Soft**  | 커밋만 되돌리고 변경은 staged 상태로 유지   |
| **Mixed** | 커밋을 되돌리고 변경은 unstaged 상태로 유지 |
| **Hard**  | 커밋과 작업 트리 변경을 모두 폐기          |

<Warning>
  **Hard** 를 고르면 경고가 붙고 실행 버튼이 빨간색으로 바뀝니다.
  커밋되지 않은 변경이 사라지며 되돌릴 수 없습니다.
</Warning>

## 충돌이 나면

충돌이 나면 작업이 중단되고 워킹 카피 패널에 배너가 나타납니다.
배너에서 진행 중인 작업 종류와 남은 충돌 개수를 확인하고 **계속(Continue)** / **중단(Abort)** 할 수 있으며, 리베이스 중에는 **건너뛰기(Skip)** 도 나옵니다.

<Frame>
  <img src="https://mintcdn.com/railgit/1HhHpeGsA-i8McQ3/images/history-rebase-in-progress.png?fit=max&auto=format&n=1HhHpeGsA-i8McQ3&q=85&s=c6e893dd473077f50c9bd9e8f0acc38b" alt="리베이스 진행 중 워킹 카피 패널 위쪽 배너 — 'Rebase 중 · 1 충돌'과 중단·건너뛰기 버튼, 충돌이 남아 비활성인 계속 버튼" width="2386" height="1784" data-path="images/history-rebase-in-progress.png" />
</Frame>

<Note>
  남은 충돌이 있으면 **계속** 버튼이 비활성 상태입니다.
  충돌 파일을 모두 해결해 스테이지하면 활성화됩니다.
  해결 방법은 [머지 충돌 해결](/ko/review/merge-conflicts)에서 다룹니다.
</Note>

<Warning>
  **Squash 머지에서 충돌이 나면 배너가 나타나지 않습니다.** `--squash` 는 진행 중 상태를 남기지 않기 때문입니다.
  충돌을 해결하고 스테이지한 뒤 일반 커밋으로 마무리하세요.
  되돌리려면 Reset을 사용합니다.
</Warning>

## 히스토리 재작성 주의

<Warning>
  리베이스와 Hard reset은 커밋 히스토리를 다시 씁니다.
  이미 push한 커밋이 대상에 포함돼 있었다면 작업 후 force-push가 필요하다는 안내가 뜨며, Push 다이얼로그의 **강제 (--force-with-lease)** 토글을 사용하세요.
  공유 브랜치에서는 팀과 합의된 경우에만 재작성하세요.
</Warning>
