되돌리기(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으로 나뉘는 그림
Discard ChangesUndoRevert Changes in Commit
언제커밋하기 전커밋했지만 푸시하기 전푸시한 뒤
하는 일고른 파일에서, 아직 커밋하지 않은 변경을 버립니다가장 최근 커밋을 취소합니다. 변경은 버려지지 않고 Changes로 돌아옵니다고른 커밋 하나가 만든 변경을 취소하는 새 커밋을 만듭니다
기록남지 않습니다남지 않습니다실수한 커밋과 취소한 커밋이 모두 남습니다
자주 쓰는 때파일을 고치다 망쳤을 때메모를 잘못 썼을 때, 파일을 빼먹고 커밋했을 때이미 GitHub에 올라간 실수를 고칠 때
조심할 점그 파일의 필요한 수정도 함께 사라집니다가장 최근 커밋 하나에만 쓸 수 있습니다폴더 전체를 그 시점으로 되감는 것이 아닙니다

왜 푸시한 뒤에는 Undo를 쓰지 않나요? GitHub에 이미 올라간 기록을 내 PC에서만 지우면, 두 곳의 기록이 어긋납니다. 그래서 GitHub Desktop은 푸시한 커밋에는 Undo를 보여 주지 않습니다. 올라간 뒤에는 "취소했다"는 기록을 하나 더 쌓는 Revert를 씁니다.

이 장의 실습은 모두 6장에서 만든 README.md 로 합니다. 시작하기 전에 위쪽 오른쪽 버튼이 Fetch origin 이고 Changes가 비어 있는지 확인합니다.

2. 실습 1: 커밋 전에 되돌리기 (Discard Changes)

2-1. 일부러 망가뜨리기

  1. VS Code에서 README.md 의 내용을 전부 지우고 저장합니다.
  2. GitHub Desktop의 Changes에 README.md 가 나타나고, 오른쪽이 온통 빨간색입니다.
- # my-first-repo
-
- Git 연습용 저장소입니다.
- 웹에서 추가한 줄

2-2. 버리기

Changes의 README.md를 오른쪽 클릭해 Discard Changes를 고르고, 확인 창에서 파일 이름을 본 뒤 Discard Changes를 누르는 그림
  1. Changes 목록의 README.md 에서 마우스 오른쪽 버튼을 누르고 Discard Changes… 를 고릅니다. (Mac 트랙패드는 두 손가락으로 클릭)
  2. 확인 창에 버릴 파일 이름이 나옵니다. 맞는지 봅니다.
  3. Discard Changes 를 누릅니다.

Changes가 비고, VS Code의 README.md 가 마지막 커밋 상태로 돌아옵니다.

Discard는 파일 단위입니다. 한 파일 안에 필요한 수정과 실수가 섞여 있으면, 필요한 수정도 함께 사라집니다. 헷갈리면 버리지 말고, 필요한 부분을 VS Code에서 손으로 되돌린 뒤 저장하는 편이 안전합니다.

3. 실습 2: 푸시 전에 방금 한 커밋 취소하기 (Undo)

3-1. 메모를 잘못 쓰고 커밋하기

  1. VS Code에서 README.md 맨 아래에 Undo 연습 줄 을 추가하고 저장합니다.
  2. 메모 칸에 일부러 ㅁㄴㅇㄹ 이라고 쓰고 커밋합니다. 푸시는 하지 않습니다.

위쪽 오른쪽 버튼이 Push origin(↑1)입니다. 커밋이 아직 내 PC에만 있다는 뜻입니다.

3-2. Undo로 취소하기

Changes 아래쪽의 Committed just now 줄에 있는 Undo 버튼을 누르면, 변경은 Changes로, 메모는 Summary 칸으로 돌아온다는 그림
  1. 왼쪽 Changes 탭 아래쪽에 Committed just now 와 방금 쓴 메모, Undo 버튼이 보입니다.
  2. Undo 를 누릅니다.
  3. README.md 가 다시 Changes에 나타나고, Summary 칸에 ㅁㄴㅇㄹ 이 돌아옵니다. 고친 내용은 그대로 있습니다.
  4. 실제 작업이라면 여기서 메모를 고쳐 다시 커밋합니다. 이번에는 연습이므로 README.md 를 Discard Changes 로 버립니다. Changes가 비고 위쪽 오른쪽이 Fetch origin 으로 돌아오면 끝입니다.

파일을 빼먹고 커밋했을 때도 같은 방법을 씁니다. Undo로 취소하고, 빠진 파일까지 체크한 뒤 다시 커밋합니다.

Undo 버튼이 보이지 않으면 이미 푸시했거나, 가장 최근 커밋이 아닌 것입니다. 그때는 아래 Revert를 씁니다.

4. 실습 3: 푸시 후에 되돌리기 (Revert)

4-1. 실수를 커밋하고 푸시하기

  1. VS Code에서 README.md 맨 아래에 이 줄은 실수입니다 를 추가하고 저장합니다.
  2. GitHub Desktop에서 메모 되돌리기 연습용 실수 로 커밋하고, Push origin 을 누릅니다.

실수가 GitHub에까지 올라간 상태입니다.

4-2. 그 커밋의 변경 취소하기

History 탭에서 되돌리기 연습용 실수 커밋을 오른쪽 클릭해 Revert Changes in Commit을 고르면, 맨 위에 Revert 커밋이 새로 생기는 그림
  1. 왼쪽 History 탭을 누릅니다.
  2. 되돌리기 연습용 실수 커밋에서 마우스 오른쪽 버튼 → Revert Changes in Commit 을 고릅니다.
    • 같은 메뉴의 Reset to Commit…, Checkout Commit 은 누르지 않습니다. 동작이 전혀 다릅니다.
  3. History 맨 위에 Revert "되돌리기 연습용 실수" 라는 커밋이 새로 생깁니다. README.md 에서 이 줄은 실수입니다 가 사라졌습니다.
  4. Push origin 을 누릅니다. GitHub에도 되돌린 결과가 올라갑니다.

새로 생긴 Revert 커밋을 눌러 보면, 실수 커밋과 정반대의 diff가 보입니다.

  웹에서 추가한 줄
- 이 줄은 실수입니다

4-3. Revert가 하는 일

1번부터 4번 커밋 뒤에 5번 Revert 커밋이 생기고, 5번이 4번의 변경만 취소한다는 그림

Revert는 실수한 커밋을 지우지 않습니다. "그 변경을 취소했다"는 커밋이 하나 더 쌓입니다. 통장에서 잘못 보낸 돈을 돌려받아도 '출금'과 '입금' 두 줄이 모두 남는 것과 같습니다.

  • 폴더 전체를 과거 시점으로 되감는 기능이 아닙니다. 고른 커밋이 바꾼 부분만 원래대로 돌립니다. 그 뒤에 한 수정은 그대로 남습니다.
  • 되돌릴 커밋이 여러 개라면 가장 최근 것부터 하나씩 합니다.

5. 이럴 때는 멈추세요

상황할 일
Revert를 눌렀더니 충돌(conflict) 안내가 뜹니다되돌리려는 커밋 뒤에 같은 곳을 또 고친 커밋이 있는 경우입니다. 창의 취소 버튼으로 빠져나옵니다. 충돌은 10장에서 다룹니다
결과가 예상과 다릅니다더 누르지 말고 멈춥니다. 커밋된 내용은 기록에 남아 있으므로, 경험자에게 도움을 요청합니다
"지난주 상태로 통째로 돌아가고 싶다"여러 커밋을 한꺼번에 되감는 일은 이 튜토리얼 범위 밖입니다. 직접 하지 말고 경험자에게 요청합니다

도움을 요청할 때는 화면을 캡처해 보여 주면 빠릅니다. 캡처에 비밀번호나 개인정보가 보이지 않는지 먼저 확인합니다.

확인

확인 문제

① 파일을 고치다 망쳤고, 아직 커밋하지 않았습니다. 어떤 방법을 쓰나요? Discard Changes입니다. 그 파일의 커밋하지 않은 변경을 버리고 마지막 커밋 상태로 돌아갑니다.
② 커밋 메모에 오타가 있습니다. 아직 푸시하지 않았습니다. 어떻게 하나요? Undo를 누릅니다. 커밋이 취소되고 메모가 Summary 칸으로 돌아오므로, 고쳐서 다시 커밋합니다.
③ Revert를 하면 실수한 커밋은 History에서 사라지나요? 사라지지 않습니다. 실수한 커밋은 남고, 그 변경을 취소하는 새 커밋이 추가됩니다.
④ 3일 전 커밋을 Revert하면, 그 뒤 3일 동안 한 작업도 사라지나요? 사라지지 않습니다. Revert는 고른 커밋 하나가 바꾼 부분만 취소합니다. 다만 그 뒤에 같은 곳을 고쳤다면 충돌이 날 수 있습니다.

다음 장

8장. 브랜치(Branch)

© KYONGHO ENGINEERING & ARCHITECTS