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

# 되돌리기 & Undo

> 변경 버리기와 undo/redo

**Discard** 는 커밋하지 않은 변경을 버리고, **Undo/Redo** 는 앱에서 방금 한 Git 작업을 되돌립니다.

## Discard: 변경 버리기

되돌릴 수 없는 작업이라 항상 확인 모달을 거칩니다.

<Steps>
  <Step title="버릴 대상 고르기">
    워킹 카피 패널에서 파일 행에 마우스를 올리면 나타나는 **×** 버튼을 누릅니다.
    여러 파일을 선택한 상태라면 선택 전체가 대상입니다.
    충돌 파일 섹션에는 이 버튼이 없습니다.
  </Step>

  <Step title="확인 모달에서 Discard">
    **변경사항을 버리시겠습니까?(Discard changes?)** 모달에 버려질 파일이 나열됩니다.
    **버리기(Discard)** 를 눌러야 실행됩니다.
  </Step>
</Steps>

<Frame>
  <img src="https://mintcdn.com/railgit/1HhHpeGsA-i8McQ3/images/basics-discard-confirm.png?fit=max&auto=format&n=1HhHpeGsA-i8McQ3&q=85&s=072841d7dbbb18571058c2f438a1f75c" alt="Discard changes? 확인 모달. 버려질 파일 한 개(.github/workflows/release.yml)가 수정(M) 표시와 함께 나열되고, 아래에 Cancel과 빨간 Discard 버튼이 있다" width="886" height="444" data-path="images/basics-discard-confirm.png" />
</Frame>

<Warning>
  추적 중인 파일은 마지막 커밋 상태로 복원되지만, **Untracked(새) 파일은 디스크에서 완전히 삭제**됩니다.
  이 경우 모달이 되돌릴 수 없다고 경고합니다.
</Warning>

diff에서 변경 구간에 마우스를 올리면 나타나는 **Discard** 버튼으로 헝크만 버릴 수도 있습니다.

<Note>
  헝크 Discard는 **스테이지하지 않은** 변경에만 있습니다.
  스테이지된 변경은 먼저 **Unstage** 하세요.
  새 파일, 통째로 삭제한 파일, **공백 변경 무시**를 켠 동안에는 버튼이 나타나지 않으므로 파일 단위로 버리면 됩니다.
</Note>

## Undo / Redo: 작업 되돌리기

헤더 툴바 왼쪽의 되돌리기(↩)·다시 실행(↪) 버튼을 누릅니다.
마우스를 올리면 어떤 작업을 되돌리는지 툴팁으로 보여줍니다.

<Frame>
  <img src="https://mintcdn.com/railgit/1HhHpeGsA-i8McQ3/images/basics-undo-redo.png?fit=max&auto=format&n=1HhHpeGsA-i8McQ3&q=85&s=adcc4c80cf76f292c56c9861d9547b42" alt="헤더 툴바 왼쪽에 되돌리기·다시 실행 아이콘이 있는 전체 화면. 되돌릴 작업이 있어 되돌리기 아이콘은 밝게, 다시 실행 아이콘은 흐리게 표시되고 오른쪽 아래에 작업 완료 토스트가 떠 있다" width="2906" height="1784" data-path="images/basics-undo-redo.png" />
</Frame>

### 무엇을 되돌릴 수 있나요

Undo는 **ref(브랜치·태그·HEAD)를 바꾸는 작업**을 대상으로 합니다.

<AccordionGroup>
  <Accordion title="되돌릴 수 있는 작업" icon="check">
    * 커밋 · Amend · Squash
    * 병합(merge) · rebase · reset · cherry-pick · revert
    * 체크아웃(checkout)
    * 브랜치 생성 · 삭제 · 이름 변경
    * 태그 생성 · 삭제
  </Accordion>

  <Accordion title="되돌릴 수 없는 작업" icon="x">
    * 스테이지/스테이지 해제, Discard, stash
    * push · pull · fetch 등 원격 동기화
    * 서브모듈 작업, 워크트리 생성·삭제
    * 충돌로 끝난 병합·rebase·cherry-pick·revert (abort·continue로 처리)
  </Accordion>
</AccordionGroup>

<Warning>
  커밋·Amend·Squash를 되돌리면 **soft reset** 이라 변경이 스테이지된 상태로 남습니다.
  병합·rebase·cherry-pick·revert를 되돌리면 **hard reset** 이 실행되며, 커밋되지 않은 변경이 있으면 확인 모달이 먼저 뜨고 진행하면 그 변경은 사라집니다.
</Warning>

### 알아두면 좋은 동작

* 되돌리기 스택은 **워크트리마다 따로** 최대 20개까지 기억합니다.
* 스택은 메모리에만 있어 **앱을 재시작하면 사라집니다**.
* 터미널 등 앱 밖에서 저장소가 바뀌었으면 해당 항목은 폐기되고 알림이 뜹니다.
* 병합·rebase가 진행 중이면 Undo/Redo가 비활성화됩니다.

<Tip>
  스택 밖의 작업은 되돌릴 수 없습니다.
  그럴 때는 터미널의 `git reflog` 가 마지막 수단입니다.
</Tip>
