바이브 코딩을 위한 Git & GitHub
Part 2: 실습 완주

6장. 실수 되돌리기 — Revert, 브랜치, 안전한 실험

2026년 5월 13일 수요일 오후 3시 40분. 학교 축제가 이틀 앞으로 다가왔습니다. 김진관 선생님은 class-2b 웹사이트에 축제 홍보 페이지를 붙이기로 했습니다. Claude 창을 열고 "class-2b 첫 화면에 축제 홍보 배너 추가해줘. 전체 색상도 학교 축제 분위기로 바꿔줘"라고 한 번에 지시했습니다. 1분 뒤 Claude가 수정한 파일 목록이 떴습니다. 파일 12개가 동시에 바뀌어 있었습니다. 김진관 선생님은 축제 배너만 바뀌길 기대했는데, 사이트 전체 색상이 노란색·보라색·형광 분홍의 뒤섞임이 돼 있었습니다. 브라우저에서 class-2b를 열었습니다. 화면이 완전히 무너져 있었습니다. 수업 공지가 보이지 않았습니다. 학급 앨범 링크가 어디로 갔는지 찾을 수 없었습니다. 내일 오전 9시 축제 시작. 손이 떨렸습니다. 그런데 이번엔 달랐습니다. 김진관 선생님은 GitHub Desktop의 History 탭을 열었습니다. 맨 위에 방금 Claude가 찍은 "축제 홍보 페이지 추가" 커밋이 올라와 있었습니다. 그 줄 위에서 마우스 오른쪽 버튼을 눌렀습니다. 메뉴 중 Revert Changes in Commit을 클릭했습니다. 10초 뒤 Changes 탭에 초록색·빨간색 줄이 반대 방향으로 나타나더니 자동 커밋 하나가 새로 쌓였습니다. 브라우저에서 class-2b 페이지를 새로고침했습니다. 원래 화면이 그대로 돌아와 있었습니다. 이것이 프롤로그에서 3월 3일 아침 수업 5분 전에 예고한 장면입니다.

브랜치는 원본을 건드리지 않고 실험할 수 있는 평행 세계입니다.

이 챕터를 마치면 다음 네 가지를 할 수 있습니다.

  • History 탭에서 잘못된 커밋을 Revert로 한 번에 되돌릴 수 있습니다
  • New Branch로 원본과 분리된 실험 공간을 만들 수 있습니다
  • 실험이 성공했을 때 merge로 원본에 반영할 수 있습니다
  • 사용이 끝난 브랜치를 삭제해 저장소를 깔끔하게 유지할 수 있습니다

(1) 커밋 되돌리기 — 일기장에 취소 페이지를 덧붙이는 방식

일기장에 어제 쓴 내용이 마음에 들지 않는다고 찢어버리면 증거가 사라집니다. 대신 오늘 날짜로 "어제 쓴 내용은 취소합니다"라는 새 페이지를 덧붙이면 기록은 남고 상태는 되돌아갑니다. Revert가 바로 이 방식입니다. 잘못된 커밋을 지우지 않고, 그 커밋의 반대 행동을 하는 "취소 커밋"을 새로 만들어 히스토리 맨 위에 쌓습니다. 과거 기록이 그대로 보존되기 때문에 "어떤 시도를 했다가 되돌렸다"는 과정도 남습니다.

실습 순서는 다음과 같습니다. (1) 실험용 커밋을 하나 일부러 만들어봅니다. class-2b 폴더의 index.html 제목을 <h1>2학년 B반</h1>에서 <h1>2B</h1>로 줄이고 저장합니다. GitHub Desktop에서 Summary에 제목 축약 실험이라고 적은 뒤 Commit to main을 누릅니다. (2) 이제 이 커밋을 되돌립니다. 왼쪽 중간 영역의 History 탭을 클릭합니다. 가장 위에 제목 축약 실험 커밋이 보입니다. (3) 이 줄 위에서 마우스 오른쪽 버튼을 누릅니다. 메뉴가 펼쳐지면 Revert Changes in Commit을 클릭합니다. (4) 10초 안에 Changes 탭이 깜빡이다가 자동으로 새 커밋이 하나 쌓입니다. 메시지는 Revert "제목 축약 실험"으로 자동 입력됩니다. (5) index.html을 다시 열어봅니다. 제목이 <h1>2학년 B반</h1>으로 원상 복구돼 있습니다.

Revert는 "시간을 되감는" 것이 아니라 "취소한다는 새로운 기록을 남기는" 것입니다. 그래서 과거 커밋은 History에 그대로 남고, 팀원 누구도 혼란 없이 상황을 이해할 수 있습니다. 이게 전부입니다.

잘 안 되면?

  • Revert Changes in Commit 메뉴가 회색으로 눌리지 않는 경우: 해당 커밋 이후에 다른 커밋이 이미 쌓였거나, 푸시된 커밋이라 보호 설정이 걸렸을 수 있습니다. 이 경우 Revert 대신 8장의 충돌 해결 방법을 따라야 합니다.
  • Revert 후 화면이 변하지 않은 경우: 브라우저 캐시가 이전 화면을 보여주고 있습니다. Ctrl+Shift+R(Mac은 Cmd+Shift+R)로 강제 새로고침합니다.
  • Revert 커밋을 또 Revert하고 싶은 경우: 가능합니다. Revert 커밋도 일반 커밋이라서 똑같이 오른쪽 버튼으로 되돌릴 수 있습니다.

(2) 브랜치 만들기 — 원본 수업 자료를 복사한 뒤 실험본에 빨간 펜 칠하기

국어 수업 자료 원본이 A4 파일철에 깔끔하게 정리돼 있다고 생각해봅니다. 새로운 활동을 넣어보고 싶은데, 원본에 빨간 펜을 바로 그으면 망쳤을 때 되돌리기 어렵습니다. 대신 원본을 한 부 복사한 뒤 그 복사본 위에 자유롭게 빨간 펜으로 실험합니다. 결과가 마음에 들면 원본과 합치고, 마음에 들지 않으면 복사본을 버리면 됩니다. 브랜치가 정확히 이 복사본입니다. main 브랜치가 원본, 새로 만든 festival-theme 브랜치가 실험본입니다. 두 브랜치는 같은 저장소 안에서 나란히 존재하고, 서로를 건드리지 않습니다.

브랜치 안에서 커밋할 때 버튼 이름이 "Commit to main" 대신 "Commit to festival-theme"으로 자동 바뀝니다. 현재 작업 중인 브랜치로 커밋된다는 뜻이므로 놀라지 않아도 됩니다.

실습 순서는 다음과 같습니다. (1) GitHub Desktop 상단에서 Current Branch 라벨을 클릭합니다. 드롭다운이 펼쳐집니다. (2) 하단의 New Branch 버튼을 누릅니다. 입력창이 뜹니다. 이름 칸에 festival-theme이라고 적고 Create Branch 버튼을 누릅니다. (3) Current Branch 라벨이 main에서 festival-theme로 바뀌면 실험 공간으로 이동한 상태입니다. 이 상태에서는 파일을 아무리 고쳐도 main에 영향이 없습니다. (4) 이제 자유롭게 실험합니다. style.css를 열어 배경색을 축제용 노란색으로 바꾸고 저장합니다. Summary에 축제용 배경색 테스트를 적고 Commit to festival-theme 버튼을 누릅니다. (5) Current Branch 라벨을 다시 클릭해 main으로 돌아옵니다. 브라우저를 새로고침하면 원래 배경색이 그대로입니다. 실험 중인 색상은 festival-theme 브랜치에서만 보입니다.

브랜치 덕분에 김진관 선생님은 "망가질까 봐 건드리지 못했던" 작업을 마음 편히 시도할 수 있게 됩니다. 이게 전부입니다.

잘 안 되면?

  • New Branch 창에서 이름이 입력되지 않는 경우: 한글은 허용되지 않습니다. 영문 소문자, 숫자, 하이픈만 씁니다.
  • 브랜치를 만들었는데 파일이 사라진 것처럼 보이는 경우: 사라진 것이 아니라 main 브랜치에서 커밋하지 않은 변경이 있어 가려진 상태입니다. Changes 탭에 변경이 남아 있는지 먼저 확인합니다.
  • Current Branch를 바꿨는데 브라우저 화면이 그대로인 경우: 저장된 파일만 실제로 전환되므로, 편집기를 닫았다가 다시 열면 해당 브랜치의 최신 파일이 반영됩니다.

(3) 머지 — 실험본이 마음에 들면 원본에 합치고 복사본은 버리기

복사본 위에서 실험한 결과가 마음에 들면, 그 내용을 원본 파일철에 옮겨 적어야 합니다. 복사본은 역할을 다했으니 버려도 됩니다. 머지(merge)가 이 "옮겨 적기"에 해당하고, 브랜치 삭제가 "복사본 버리기"에 해당합니다. GitHub Desktop에서는 두 동작이 각각 버튼 두세 번의 클릭입니다.

실습 순서는 다음과 같습니다. (1) 먼저 main 브랜치로 이동합니다. Current Branch 라벨을 클릭해 main을 선택합니다. (2) 상단 메뉴에서 Branch > Merge into Current Branch를 클릭합니다. 창이 뜨면 festival-theme를 선택하고 하단의 Create a merge commit 버튼을 누릅니다. (3) 10초 안에 main 브랜치에 festival-theme의 모든 커밋이 반영됩니다. History 탭을 열면 실험 중에 찍은 커밋들이 main에도 나타납니다. (4) 이제 역할을 다한 festival-theme 브랜치를 정리합니다. Current Branch 라벨 > 목록에서 festival-theme로 이동한 뒤, 상단 메뉴의 Branch > Delete를 누르고 Delete 버튼으로 확인합니다. (5) 저장소가 main 하나로 깔끔해집니다. Push origin을 눌러 merge된 최신 main을 GitHub에도 올립니다.

반대로 실험이 실패해 main에 합치지 않기로 했다면, merge 단계를 건너뛰고 바로 브랜치 삭제만 하면 됩니다. 김진관 선생님은 그날 저녁 축제용 노란 배경이 마음에 들지 않아 festival-theme 브랜치를 삭제했습니다. 그리고 다른 이름으로 새 브랜치를 만들어 다시 실험을 시작했습니다. main은 그동안 한 번도 흔들리지 않았습니다. 이게 전부입니다.

잘 안 되면?

  • Merge 중 "conflict" 경고가 뜨는 경우: 두 브랜치가 같은 줄을 서로 다르게 고쳤을 때 나타납니다. 지금 단계에서는 Abort Merge를 눌러 취소한 뒤, main의 최신 상태를 브랜치로 먼저 가져오는 8장의 절차를 따릅니다.
  • 브랜치를 삭제했는데 GitHub 웹에는 여전히 남아 있는 경우: 로컬과 원격은 별개입니다. 브랜치 삭제 후 Push origin 버튼 옆에 나타나는 안내를 따라 원격 브랜치도 함께 삭제합니다.
  • Merge 커밋이 History에 보이지 않는 경우: main이 아닌 다른 브랜치에서 Merge를 시도했을 가능성이 있습니다. Current Branch가 반드시 main이어야 합니다.

5월 14일 오전 9시 축제 시작 순간, class-2b 홍보 페이지는 정상 동작했습니다. 2B반 34명 전원이 핸드폰으로 그 주소를 열어 팀별 부스 위치를 확인했습니다. 김진관 선생님은 그날 처음으로 브랜치를 만들어 색상을 안전하게 실험했고, 실패한 실험은 아무 흔적도 남기지 않고 정리됐습니다. 프롤로그의 3월 3일 수업 5분 전 빈 화면 사건은 더 이상 반복되지 않았습니다.

핵심 3줄 요약

  • Revert는 History 탭에서 잘못된 커밋에 오른쪽 클릭 한 번이면 "취소 커밋"을 새로 만들어 원상 복구합니다.
  • 브랜치는 원본 main을 건드리지 않고 실험할 수 있는 평행 세계이며, New Branch 버튼 한 번이면 생성됩니다.
  • 실험이 성공하면 Branch > Merge into Current Branch로 합치고, 실패하면 브랜치만 삭제해 흔적을 남기지 않습니다.

완료 체크리스트

  • History 탭에서 특정 커밋을 오른쪽 클릭해 Revert Changes in Commit을 실행할 수 있다
  • Current Branch 라벨 > New Branch로 festival-theme 같은 실험 브랜치를 만들 수 있다
  • 실험 브랜치에서 자유롭게 파일을 고치고 커밋할 수 있으며, main에는 영향이 없다는 사실을 확인할 수 있다
  • Branch > Merge into Current Branch로 실험 결과를 main에 합치고, 역할을 다한 브랜치를 삭제할 수 있다

다음 챕터 예고

다음 7장에서는 컴퓨터 없이 핸드폰만 손에 쥐고 있는 상황, 예를 들어 출장 중이나 야외 수업 현장에서도 GitHub 모바일 앱으로 코드를 수정하고 반영하는 방법을 다룹니다.