> ## 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: 변경 버리기

Discard는 커밋하지 않은 변경을 원래대로 되돌립니다. **되돌릴 수 없는 파괴적 작업**이라 항상 확인 모달을 거칩니다.

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

  <Step title="확인 모달 검토">
    **"변경사항을 버리시겠습니까?(Discard changes?)"** 모달이 뜨고, 버려질 파일 목록이 나열됩니다. 대상이 많으면 목록이 스크롤됩니다.
  </Step>

  <Step title="Discard 확인">
    모달에서 **버리기(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(새) 파일을 버리면 디스크에서 완전히 삭제**됩니다. 대상에 Untracked 파일이 있으면 모달이 "되돌릴 수 없다"고 경고합니다.
</Warning>

diff를 열어 놓았다면, 변경 구간(섹션) 위에 마우스를 올렸을 때 나타나는 **Discard** 버튼으로 그 덩어리만 버릴 수도 있습니다. 이때도 몇 줄이 지워지고 몇 줄이 복원되는지 알려주는 확인 모달이 뜹니다.

<Note>
  헝크 단위 **Discard**는 **스테이지하지 않은** 변경에만 있습니다(헝크 버튼은 한국어 UI에서도 영문 라벨입니다). 스테이지된 변경을 버리려면 먼저 **Unstage**한 뒤 **Discard**하세요. 새 파일(Untracked)이나 통째로 삭제한 파일의 헝크에는 Discard 버튼이 표시되지 않고, **공백 변경 무시**를 켜 둔 동안에도 나타나지 않으니 이때는 파일 단위로 버리면 됩니다.
</Note>

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

ParalleLane은 앱에서 수행한 Git 작업을 스택에 기록해, **방금 한 실수를 즉시 되돌릴 수** 있게 합니다.

<Steps>
  <Step title="Undo / Redo 버튼 사용">
    헤더 툴바 왼쪽의 되돌리기(↩)·다시 실행(↪) 버튼을 누릅니다. 버튼에 마우스를 올리면 어떤 작업을 되돌리는지 툴팁으로 보여줍니다(예: "되돌리기: 'feature/x' 머지").
  </Step>

  <Step title="단축키">
    `Cmd`/`Ctrl` + `Z` 로 되돌리고, `Cmd`/`Ctrl` + `Shift` + `Z` 로 다시 실행합니다. 텍스트 입력란이나 편집기에 포커스가 있을 때는 텍스트 편집 되돌리기와 충돌하지 않도록 이 단축키가 동작하지 않습니다.
  </Step>
</Steps>

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

<Tip>
  스택이 비어 있으면 해당 버튼은 비활성화되고 툴팁이 **"되돌릴 작업 없음(Nothing to undo)"** / **"다시 실행할 작업 없음(Nothing to redo)"** 으로 표시됩니다.
</Tip>

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

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**이 실행되고(reset 되돌리기는 원래 모드를 그대로 역적용합니다), 이때 커밋되지 않은 변경이 있으면 **"커밋되지 않은 변경이 있는 채로 되돌릴까요?"** 확인 모달이 먼저 뜹니다. 진행하면 그 변경은 사라집니다. 원래 작업이 이미 날려버린 변경(예: hard reset이 지운 작업 트리의 변경)은 Undo로도 되살아나지 않습니다.
</Warning>

### 알아두면 좋은 동작

* 되돌리기 스택은 **워크트리마다 따로** 유지되며, 최대 20개까지 기억합니다.
* 스택은 메모리에만 있어 **앱을 재시작하면 사라집니다**.
* 되돌리기 직전에 실제 저장소 상태를 확인합니다. 터미널 등 앱 밖에서 저장소가 바뀌었으면 해당 항목은 폐기되고 "외부에서 변경되어 되돌릴 수 없다"는 알림이 뜹니다.
* 병합·rebase 같은 작업이 진행 중이면 Undo/Redo가 비활성화됩니다.

<Tip>
  스택 밖에서 벌어진 일이나 이미 스택에서 밀려난 오래된 작업은 되돌릴 수 없습니다. 그럴 때는 터미널의 `git reflog`가 마지막 복구 수단입니다.
</Tip>
