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

# Amend & Squash

> 커밋 수정과 여러 커밋 합치기

이미 만든 커밋을 다듬는 두 가지 방법입니다. **Amend**로 마지막 커밋에 변경이나 메시지를 고쳐 넣고, **Squash**로 연속된 여러 커밋을 하나로 합칠 수 있습니다. 둘 다 push 전 히스토리를 깔끔하게 정리할 때 유용합니다.

## Amend: 마지막 커밋 수정

Amend는 새 커밋을 만들지 않고, **HEAD(마지막) 커밋**에 변경을 흡수하거나 메시지를 바꿉니다.

<Steps>
  <Step title="Amend 모드 켜기">
    워킹 카피(Working copy) 패널에서 커밋 버튼 옆의 **마지막 커밋 수정 (Amend)** 체크박스를 켭니다. 또는 그래프에서 HEAD 커밋을 우클릭해 **커밋 수정 (Amend)** 을 선택하면 워킹 카피가 열리며 amend 모드로 전환됩니다.
  </Step>

  <Step title="대상 커밋의 파일 확인">
    Amend 모드에서는 스테이지됨 섹션에 **수정 대상 커밋(HEAD)의 파일들**이 나타납니다. 이 상태는 HEAD가 아니라 그 부모(HEAD^)를 기준으로 비교한 것입니다.
  </Step>

  <Step title="포함/제외 조정">
    커밋 파일을 **스테이지 해제**하면 그 파일은 amend에서 빠지고, 새 작업 변경을 **스테이지**하면 커밋에 더해집니다. 요약과 설명은 기존 커밋 메시지가 미리 채워지므로 그대로 고칠 수 있습니다.
  </Step>

  <Step title="Amend 클릭">
    커밋 버튼이 **수정 (Amend)** 으로 바뀝니다. 클릭하면 현재 index 상태로 마지막 커밋이 다시 작성됩니다. 새로 스테이지한 변경이 없어도(메시지만 고치는 reword) 요약만 있으면 실행할 수 있습니다.
  </Step>
</Steps>

<Frame>
  <img src="https://mintcdn.com/railgit/1HhHpeGsA-i8McQ3/images/basics-amend-mode.png?fit=max&auto=format&n=1HhHpeGsA-i8McQ3&q=85&s=1fbc86d36b7d1c3ce7bce116e9e106b6" alt="Amend 모드로 전환된 워킹 카피 패널. Amend last commit 체크박스가 켜져 있고 요약란에는 기존 커밋 메시지 Merge feature/statement-search가 미리 채워졌으며, 오른쪽 버튼 라벨이 Amend로 바뀌었다" width="638" height="1702" data-path="images/basics-amend-mode.png" />
</Frame>

<Tip>
  Amend 모드를 다시 끄면 amend에서 **제외했던 파일**의 인덱스가 HEAD 기준으로 복원되고, 켜기 전에 쓰던 새 커밋 초안(요약·설명)이 되살아납니다. HEAD를 실제로 옮기지 않기 때문에 그래프가 흔들리지 않고 안전하게 취소됩니다. 다만 amend 중에 새로 스테이지한 변경은 그대로 스테이지된 상태로 남습니다.
</Tip>

<Note>
  커밋이 하나도 없거나(첫 커밋 전), 병합·rebase·cherry-pick·revert가 진행 중이면 Amend 체크박스가 비활성화됩니다.
</Note>

## Squash: 여러 커밋 합치기

Squash는 그래프에서 고른 연속 커밋들을 하나로 합칩니다. ParalleLane은 **HEAD(브랜치 끝)를 포함하는 연속 구간**만 지원합니다.

<Steps>
  <Step title="커밋 여러 개 선택">
    그래프에서 첫 커밋을 클릭한 뒤, `Shift` 클릭으로 범위를 넓히거나 `Cmd`/`Ctrl` 클릭으로 개별 선택합니다.
  </Step>

  <Step title="스쿼시 메뉴 열기">
    선택 집합 안의 커밋을 우클릭하면 맨 위에 **N개 커밋 스쿼시** 항목이 나타납니다. 조건을 만족할 때만 표시됩니다.
  </Step>

  <Step title="합친 메시지 작성">
    다이얼로그에는 합쳐질 커밋 목록이 짧은 해시와 함께 읽기 전용으로 보입니다. **제목(Title)** 에는 가장 오래된 커밋의 요약이, **설명(Description)** 에는 나머지 커밋들의 요약이 오래된 순서대로 미리 채워집니다. 메시지를 정리한 뒤 **스쿼시(Squash)** 를 누릅니다.
  </Step>

  <Step title="결과 확인">
    합쳐진 하나의 커밋이 새 HEAD가 되고 그래프가 다시 그려집니다.
  </Step>
</Steps>

<Frame>
  <img src="https://mintcdn.com/railgit/1HhHpeGsA-i8McQ3/images/basics-squash-dialog.png?fit=max&auto=format&n=1HhHpeGsA-i8McQ3&q=85&s=3e417af4b97c7db4747e369b49e482ee" alt="Squash 2 commits 다이얼로그. 위쪽에 합쳐질 커밋 두 개가 짧은 해시와 제목으로 읽기 전용 목록에 나열되고, 아래 TITLE·DESCRIPTION 입력란에 두 커밋 메시지가 미리 채워져 있으며 하단에 Cancel과 Squash 버튼이 있다" width="886" height="808" data-path="images/basics-squash-dialog.png" />
</Frame>

스쿼시 메뉴는 아래 조건을 **모두** 만족할 때만 나타납니다.

<AccordionGroup>
  <Accordion title="스쿼시가 가능한 조건" icon="list-checks">
    * 커밋이 2개 이상 선택됨
    * 선택 집합에 HEAD가 포함됨
    * HEAD에서 부모를 따라 내려간 **연속된 선형 체인**임 (중간에 빠진 커밋 없음)
    * 선택한 커밋 중 **병합 커밋이 없음** (전부 부모 1개)
    * 가장 오래된 커밋이 **루트 커밋이 아님** (부모가 있어야 함)

    비연속 선택, HEAD 미포함, 병합 커밋 포함, 루트 포함인 경우에는 메뉴가 나타나지 않습니다.
  </Accordion>
</AccordionGroup>

<Warning>
  스쿼시는 **추적 중인 파일에 커밋되지 않은 변경이 있으면 거부**됩니다(아직 추적하지 않는 새 파일은 상관없습니다). 작업 트리를 먼저 커밋하거나 정리한 뒤 실행하세요. 또한 합쳐진 커밋의 작성자·날짜는 현재 사용자와 지금 시각으로 바뀝니다(원본 작성자 정보는 보존되지 않습니다).
</Warning>

## 이미 push한 커밋을 고칠 때

Amend와 Squash는 로컬 히스토리를 **다시 씁니다**. 대상에 이미 원격으로 push한 커밋이 포함돼 있으면 로컬과 원격이 갈라집니다.

<Warning>
  이미 push된 커밋을 amend/squash하면 다음 push에서 **force push가 필요**합니다. ParalleLane은 이 경우 성공 후 안내 알림을 보여주지만 자동으로 force push하지는 않습니다. 협업 중인 공유 브랜치에서는 다른 사람의 작업을 덮어쓸 수 있으니 특히 주의하세요. force push는 직접 실행해야 합니다.
</Warning>

<Note>
  Amend와 Squash도 **되돌리기(Undo) 대상**입니다. 실행 직후라면 헤더 툴바의 되돌리기 버튼이나 `Cmd`/`Ctrl` + `Z` 로 이전 상태로 돌아갈 수 있고, 이때 soft reset이 적용되므로 커밋에 들어 있던 변경은 스테이지된 상태로 남습니다. 되돌리기 스택은 워크트리마다 최근 20개까지만 메모리에 남고 앱을 재시작하면 사라지므로, 그 뒤에는 터미널의 `git reflog`가 마지막 수단입니다. [되돌리기 & Undo](/basics/discard-undo) 문서를 참고하세요.
</Note>
