되돌리기(Discard · Undo · Revert)
이 글의 목차
소요: 25분 · 버전: v0.2 (2026-10-01) · 7장
| 이 장의 질문 | 실수는 어떻게 되돌리는가 |
|---|---|
| 다루는 것 | 커밋 전 되돌리기(Discard Changes), 푸시 전 커밋 취소(Undo), 푸시 후 되돌리기(Revert Changes in Commit), 셋을 고르는 기준 |
| 다루지 않는 것 | 여러 커밋을 한꺼번에 되감기, 충돌 해결(10장) |
| 이 장을 마치면 | 실수한 변경을 커밋 전이든, 푸시 전이든 후든 안전하게 되돌릴 수 있습니다 |
1. 어느 방법을 쓸지 고르기
| Discard Changes | Undo | Revert Changes in Commit | |
|---|---|---|---|
| 언제 | 커밋하기 전 | 커밋했지만 푸시하기 전 | 푸시한 뒤 |
| 하는 일 | 고른 파일에서, 아직 커밋하지 않은 변경을 버립니다 | 가장 최근 커밋을 취소합니다. 변경은 버려지지 않고 Changes로 돌아옵니다 | 고른 커밋 하나가 만든 변경을 취소하는 새 커밋을 만듭니다 |
| 기록 | 남지 않습니다 | 남지 않습니다 | 실수한 커밋과 취소한 커밋이 모두 남습니다 |
| 자주 쓰는 때 | 파일을 고치다 망쳤을 때 | 메모를 잘못 썼을 때, 파일을 빼먹고 커밋했을 때 | 이미 GitHub에 올라간 실수를 고칠 때 |
| 조심할 점 | 그 파일의 필요한 수정도 함께 사라집니다 | 가장 최근 커밋 하나에만 쓸 수 있습니다 | 폴더 전체를 그 시점으로 되감는 것이 아닙니다 |
왜 푸시한 뒤에는 Undo를 쓰지 않나요? GitHub에 이미 올라간 기록을 내 PC에서만 지우면, 두 곳의 기록이 어긋납니다. 그래서 GitHub Desktop은 푸시한 커밋에는 Undo를 보여 주지 않습니다. 올라간 뒤에는 "취소했다"는 기록을 하나 더 쌓는 Revert를 씁니다.
이 장의 실습은 모두 6장에서 만든 README.md 로 합니다. 시작하기 전에 위쪽 오른쪽 버튼이 Fetch origin 이고 Changes가 비어 있는지 확인합니다.
2. 실습 1: 커밋 전에 되돌리기 (Discard Changes)
2-1. 일부러 망가뜨리기
- VS Code에서
README.md의 내용을 전부 지우고 저장합니다. - GitHub Desktop의 Changes에
README.md가 나타나고, 오른쪽이 온통 빨간색입니다.
- # my-first-repo
-
- Git 연습용 저장소입니다.
- 웹에서 추가한 줄
2-2. 버리기
- Changes 목록의
README.md에서 마우스 오른쪽 버튼을 누르고 Discard Changes… 를 고릅니다. (Mac 트랙패드는 두 손가락으로 클릭) - 확인 창에 버릴 파일 이름이 나옵니다. 맞는지 봅니다.
- Discard Changes 를 누릅니다.
Changes가 비고, VS Code의 README.md 가 마지막 커밋 상태로 돌아옵니다.
Discard는 파일 단위입니다. 한 파일 안에 필요한 수정과 실수가 섞여 있으면, 필요한 수정도 함께 사라집니다. 헷갈리면 버리지 말고, 필요한 부분을 VS Code에서 손으로 되돌린 뒤 저장하는 편이 안전합니다.
3. 실습 2: 푸시 전에 방금 한 커밋 취소하기 (Undo)
3-1. 메모를 잘못 쓰고 커밋하기
- VS Code에서
README.md맨 아래에Undo 연습 줄을 추가하고 저장합니다. - 메모 칸에 일부러
ㅁㄴㅇㄹ이라고 쓰고 커밋합니다. 푸시는 하지 않습니다.
위쪽 오른쪽 버튼이 Push origin(↑1)입니다. 커밋이 아직 내 PC에만 있다는 뜻입니다.
3-2. Undo로 취소하기
- 왼쪽 Changes 탭 아래쪽에 Committed just now 와 방금 쓴 메모, Undo 버튼이 보입니다.
- Undo 를 누릅니다.
README.md가 다시 Changes에 나타나고, Summary 칸에ㅁㄴㅇㄹ이 돌아옵니다. 고친 내용은 그대로 있습니다.- 실제 작업이라면 여기서 메모를 고쳐 다시 커밋합니다. 이번에는 연습이므로
README.md를 Discard Changes 로 버립니다. Changes가 비고 위쪽 오른쪽이 Fetch origin 으로 돌아오면 끝입니다.
파일을 빼먹고 커밋했을 때도 같은 방법을 씁니다. Undo로 취소하고, 빠진 파일까지 체크한 뒤 다시 커밋합니다.
Undo 버튼이 보이지 않으면 이미 푸시했거나, 가장 최근 커밋이 아닌 것입니다. 그때는 아래 Revert를 씁니다.
4. 실습 3: 푸시 후에 되돌리기 (Revert)
4-1. 실수를 커밋하고 푸시하기
- VS Code에서
README.md맨 아래에이 줄은 실수입니다를 추가하고 저장합니다. - GitHub Desktop에서 메모
되돌리기 연습용 실수로 커밋하고, Push origin 을 누릅니다.
실수가 GitHub에까지 올라간 상태입니다.
4-2. 그 커밋의 변경 취소하기
- 왼쪽 History 탭을 누릅니다.
되돌리기 연습용 실수커밋에서 마우스 오른쪽 버튼 → Revert Changes in Commit 을 고릅니다.- 같은 메뉴의 Reset to Commit…, Checkout Commit 은 누르지 않습니다. 동작이 전혀 다릅니다.
- History 맨 위에
Revert "되돌리기 연습용 실수"라는 커밋이 새로 생깁니다.README.md에서이 줄은 실수입니다가 사라졌습니다. - Push origin 을 누릅니다. GitHub에도 되돌린 결과가 올라갑니다.
새로 생긴 Revert 커밋을 눌러 보면, 실수 커밋과 정반대의 diff가 보입니다.
웹에서 추가한 줄
- 이 줄은 실수입니다
4-3. Revert가 하는 일
Revert는 실수한 커밋을 지우지 않습니다. "그 변경을 취소했다"는 커밋이 하나 더 쌓입니다. 통장에서 잘못 보낸 돈을 돌려받아도 '출금'과 '입금' 두 줄이 모두 남는 것과 같습니다.
- 폴더 전체를 과거 시점으로 되감는 기능이 아닙니다. 고른 커밋이 바꾼 부분만 원래대로 돌립니다. 그 뒤에 한 수정은 그대로 남습니다.
- 되돌릴 커밋이 여러 개라면 가장 최근 것부터 하나씩 합니다.
5. 이럴 때는 멈추세요
| 상황 | 할 일 |
|---|---|
| Revert를 눌렀더니 충돌(conflict) 안내가 뜹니다 | 되돌리려는 커밋 뒤에 같은 곳을 또 고친 커밋이 있는 경우입니다. 창의 취소 버튼으로 빠져나옵니다. 충돌은 10장에서 다룹니다 |
| 결과가 예상과 다릅니다 | 더 누르지 말고 멈춥니다. 커밋된 내용은 기록에 남아 있으므로, 경험자에게 도움을 요청합니다 |
| "지난주 상태로 통째로 돌아가고 싶다" | 여러 커밋을 한꺼번에 되감는 일은 이 튜토리얼 범위 밖입니다. 직접 하지 말고 경험자에게 요청합니다 |
도움을 요청할 때는 화면을 캡처해 보여 주면 빠릅니다. 캡처에 비밀번호나 개인정보가 보이지 않는지 먼저 확인합니다.