소개
Fieldnotes는 소규모 워크숍과 정원 산책 프로그램을 운영합니다. 게시된 업데이트가 실수로 Clay & Coffee 접수를 중단했습니다. 그 뒤에 이루어진 올바른 업데이트는 Sunset Walk를 추가했습니다. 팀은 이 새 행사와 기존 예약을 모두 유지하면서 접수를 복구하려고 합니다.
먼저 정상적인 워크숍을 이용하여 예약과 티켓 전달이 어떻게 이루어지는지 확인합니다. 그런 다음 실제 Git 이력을 살펴보고, 새 수정 커밋으로 이전의 잘못된 변경을 되돌린 뒤 게시하여 실제 예약을 테스트합니다. 사이트 전체를 과거로 되돌리면 유용한 작업을 잃게 됩니다.
기본적인 터미널 경로 이동, 커밋, 브랜치, 간단한 log/diff를 이해하고 있어야 합니다. 앞의 팀 병합 과정을 수강하는 것을 권장합니다. 준비된 Workspace와 Event Desk 탭만 있으면 됩니다. 실제 Git 저장소와 HTTP 애플리케이션이 하나의 교육용 머신에서 실행됩니다. 이 환경에서는 사이트가 공유 main을 직접 읽으며, 호스팅된 배포 파이프라인을 가르치지는 않습니다. 모든 인물 정보와 행사는 가상입니다. 소요 시간 45분은 저자의 추정치입니다.
예약을 체험하고 잘못된 업데이트 찾기
이 단계에서는 정상적인 예약을 체험하고 문제가 생긴 워크숍을 확인한 뒤, 이력에서 어느 항목이 문제이고 어떤 후속 작업을 보존해야 하는지 파악합니다.
Event Desk 탭을 여세요. 워크숍 목록에서 Postcard Studio를 찾아 View workshop 링크를 누르세요. 이 정상 워크숍에는 Save your seat, Full name 필드, Reserve a place가 표시됩니다. Alex Morgan 또는 다른 예시 이름을 입력하고 Reserve a place를 한 번 누르세요.
확인 화면에는 **You're on the list.**와 함께 Postcard Studio, Studio Two, EUR 10.00이 표시되어야 합니다. Download ticket을 누르세요. 브라우저의 다운로드 목록에서 .txt 파일을 여세요. 같은 워크숍, 이름, 모임 장소, 합계가 들어 있어야 합니다. 예약 번호는 실제 예약에 맞춰 생성되므로 실행마다 다릅니다. 문제가 생긴 워크숍도 이처럼 실제로 쓸 수 있는 정상 결과를 제공해야 합니다.
페이지 머리글의 All workshops를 누르세요. View workshop 링크로 Clay & Coffee를 여세요. 예상되는 초기 문제는 예약 양식 없이 Registration is paused가 표시되는 것입니다. 기존 예약은 여전히 유효합니다. 접수 설정을 고치려고 기존 예약을 삭제하지 마세요.
머리글의 All workshops를 다시 사용하여 Sunset Walk를 여세요. 15 Nov 2026, 16:00, East Gate, EUR 6.00으로 계속 이용할 수 있어야 합니다. 나중에 추가된 이 페이지는 문제의 일부가 아니라 보존해야 할 올바른 작업입니다.
Workspace 탭으로 전환하세요. 편집용 저장소에서 시작합니다.
cd /home/labex/project/event-desk/editor
cd는 이 터미널의 디렉터리를 바꿉니다. 경로를 잘못 입력했다면 pwd로 현재 디렉터리를 출력하고 ls로 그 안의 항목을 나열한 다음, 위의 전체 cd 명령을 다시 실행하세요. 일반적인 이동 오류 때문에 VM을 초기화할 필요는 없습니다.
이 저장소에만 작성자 정보를 설정하세요. --local은 설정을 로컬로 제한하며, 따옴표는 공백이 들어 있는 이름을 하나로 묶습니다. 다음은 가상의 예시 값이며 자신의 값을 사용해도 됩니다.
git config --local user.name "Event Editor"
git config --local user.email "events@example.com"
앱은 편집용 저장소 밖에 예약을 보관합니다. JSON 파일은 따옴표로 묶인 필드 이름 뒤에 콜론과 값을 적는 형식입니다. 이름과 워크숍 식별자는 텍스트이고, 가격은 정수 센트 단위로 저장됩니다. ..는 부모 디렉터리를 뜻하므로, 다음 읽기 전용 명령은 편집용 디렉터리를 벗어나지 않고 그 옆에 있는 예약 파일을 출력합니다.
cat ../bookings.json
원래의 Casey Lane, Sam Rivera 기록과 새로 만든 Postcard Studio 예약을 찾으세요. 이 기록들은 변경하지 않고 유지하세요. Git으로 버전 관리되는 행사 설정을 수정할 것이며, 예약 모음을 과거로 되돌리지는 않습니다.
커밋 이력을 읽으세요. --no-pager는 스크롤 뷰어를 열지 않고 바로 출력하고, --oneline은 커밋마다 짧은 한 줄을 표시하며, --decorate는 브랜치 포인터와 태그에 이름표를 붙입니다.
git --no-pager log --oneline --decorate
가장 최신 항목은 Add the Sunset Walk event이며, 그 아래에 Pause Clay and Coffee registrations와 Open the Fieldnotes event desk가 있습니다. 구체적인 커밋 ID는 실행마다 다릅니다. 준비된 태그 incident-start는 처음 전달받은 버전을 가리키는 고정 북마크입니다. main과 달리 새 커밋을 만들어도 움직이지 않습니다. 이 북마크는 변경하지 마세요.
북마크가 가리키는 최신 커밋이 무엇을 바꿨는지 읽으세요. show는 선택한 커밋의 메시지와 패치를 표시합니다.
git --no-pager show incident-start
이 커밋은 events/sunset-walk.json을 추가합니다. 보존해야 할 새 행사입니다. 되돌려야 하는 것은 이 추가 작업이 아니라 그보다 이전의 접수 중단입니다. 확인 항목은 기존 예시 예약을 새 결과로 취급하지 않고, 실제로 새로 만든 기준 워크숍 예약과 티켓을 확인합니다.
후속 작업을 보존하며 수정 커밋 추가하기
이 단계에서는 잘못된 변경분을 찾아, 처음 전달받은 마지막 커밋 다음에 새 커밋을 추가하여 그 변경분만 되돌립니다.
Workspace의 /home/labex/project/event-desk/editor에서 계속 진행하세요. 리비전 표현식으로 체크아웃하거나 브랜치를 옮기지 않고도 조상 커밋을 지정할 수 있습니다. incident-start~1은 고정 북마크에서 부모 한 단계 전, incident-start~2는 부모 두 단계 전을 뜻합니다. 가운데 커밋을 읽으세요.
git --no-pager show incident-start~1
이 패치는 registration_open을 true에서 false로 바꾸며, 대상 파일은 events/clay-and-coffee.json입니다. 이 불리언 설정은 새 접수를 허용하거나 중단합니다. capacity는 워크숍의 양수 정원이며, 이 값도 사용 가능한 상태로 유지해야 합니다. 변경되지 않은 price_cents 값 1800은 EUR 18.00을 뜻합니다.
원래 행사 스냅샷을 읽으세요. 콜론은 리비전과 파일 경로를 연결하므로 다음 표현식은 북마크에서 부모 두 단계 전의 파일을 선택합니다.
git --no-pager show incident-start~2:events/clay-and-coffee.json
원래 버전은 접수가 열려 있고 정원은 12입니다. 사이트 전체를 이 오래된 버전으로 복원하면 Sunset Walk도 사라집니다. **되돌리기(revert)**는 대신 선택한 커밋 하나의 변경에 대한 역변경을 계산하여 현재 브랜치에 새 수정 커밋으로 기록합니다. 원래의 잘못된 커밋도 이력에 남고, 그 뒤의 유용한 커밋도 유지됩니다.
수정 전에 작업 상태를 확인하세요. --short는 변경된 파일을 간결하게 나열합니다. 준비된 저장소에서는 출력이 없어야 합니다.
git status --short
이제 찾아낸 잘못된 커밋을 되돌리세요. --no-edit는 Git이 생성한 수정 메시지를 받아들이고 편집기가 열리지 않게 합니다. 고정 북마크를 사용하면 브랜치가 앞으로 이동한 뒤에도 대상이 바뀌지 않습니다.
git revert --no-edit incident-start~1
Revert "Pause Clay and Coffee registrations"로 시작하는 새 커밋과 파일 하나의 변경이 표시되어야 합니다. 작성자 정보와 커밋 ID는 다를 수 있습니다.
이미 완료된 작업을 알아보는 연습을 위해 동일한 고정 북마크 명령을 한 번 더 실행하세요. 이 반복 실행은 nothing to commit, working tree clean을 표시하며 0이 아닌 상태를 반환하는 것이 정상입니다. 단독으로 실행한 후 계속 진행하세요.
git revert --no-edit incident-start~1
변경이 이미 적용된 이 준비된 상황에서는 해결해야 할 미완성 revert가 없습니다. 빈 수정 커밋을 억지로 만드는 대신 이력과 상태를 확인하세요.
git --no-pager log --oneline --decorate
git status --short
원래의 Sunset Walk 추가, 접수 중단, 최초 커밋 위에 새 수정 커밋이 정확히 하나 있어야 하며, 작업 변경은 없어야 합니다. incident-start 북마크는 여전히 처음 전달받은 버전을 가리킵니다. 이렇게 하면 움직이는 HEAD와 고정된 문제 발생 기준점을 혼동하지 않을 수 있습니다.
정확한 수정 내용을 검토하세요. diff는 지정한 두 스냅샷을 비교합니다. HEAD는 현재 체크아웃된 커밋이고, --는 리비전과 뒤의 파일 경로를 구분합니다.
git --no-pager diff incident-start HEAD -- events/clay-and-coffee.json
역변경인 false에서 true로의 변경만 표시되어야 합니다. 새 행사가 처음 전달받은 버전과 차이가 없는지도 확인하세요.
git --no-pager diff incident-start HEAD -- events/sunset-walk.json
Sunset Walk에는 출력이 없어야 합니다. 이제 후속 작업을 유지하면서 필요한 부분만 로컬에서 수정했습니다.
Event Desk로 전환하고 머리글의 All workshops를 눌러 Clay & Coffee를 다시 여세요. 여전히 Registration is paused가 표시됩니다. 예상된 상태입니다. 편집용 커밋은 로컬에 있고 이 사이트는 공유 저장소를 읽기 때문입니다. 다음 단계에서 게시합니다. 이 단계의 확인 항목은 로컬 수정 커밋과 보존된 파일을 평가합니다.
수정 사항 게시하고 복구된 접수 테스트하기
이 단계에서는 수정 사항을 공유 main에 전달하고, 복구된 워크숍에서 실제 예약을 만든 뒤, 새 행사와 기존 예약이 온전히 남아 있는지 확인합니다.
Workspace로 전환하세요. 여전히 /home/labex/project/event-desk/editor에 있어야 합니다. origin은 준비된 원격 저장소 이름이며 /home/labex/project/event-desk/shared.git를 가리킵니다. 이 로컬 베어 저장소는 편집 가능한 작업 복사본 없이 공유 이력을 보관합니다. push origin main은 로컬 main을 이 대상으로 보냅니다.
git push origin main
거부 없이 main -> main이 표시되어야 합니다. 새 커밋은 처음 전달받은 마지막 커밋 뒤에 이어지므로, 이 일반 푸시는 게시된 모든 커밋을 보존합니다. 이 환경에는 백그라운드에서 작업하는 기여자가 없습니다. 시험 중에 거부가 발생하면 실제 이력을 살펴보세요. 원래 작업을 잃는 강제 교체는 과제 요구 사항을 충족하지 못합니다.
전달된 포인터를 검토하세요.
git --no-pager log --oneline --decorate
이제 로컬 main과 origin/main이 새 수정 커밋을 가리킵니다. 원래 문제 발생 북마크와 이전 메시지는 모두 그 아래에 남아 있습니다.
Event Desk로 전환하세요. 페이지 머리글의 All workshops를 누른 뒤 Clay & Coffee를 여세요. 이제 Save your seat, Full name, Reserve a place가 표시됩니다. 이름을 입력하기 전에 날짜, 모임 장소, EUR 18.00 가격이 변경되지 않았는지 확인하세요.

워크숍 제목과 오른쪽 양식을 확인하세요. 좁은 화면에서는 양식이 행사 상세 정보 아래에 있습니다. 남은 자리는 실제 예약을 반영하므로 예시와 다를 수 있습니다.
Jamie Chen 또는 다른 예시 전체 이름을 입력하고 Reserve a place를 한 번 누르세요. 확인 화면에는 **You're on the list.**와 함께 Clay & Coffee, 14 Nov 2026, 14:00, The Pottery Room, 한 자리, EUR 18.00이 표시되어야 합니다.

Download ticket을 누르고 브라우저의 다운로드 목록에서 받은 .txt 파일을 여세요. 예약 번호, 워크숍, 날짜, 시간, 모임 장소, 이름, 자리 수, 합계를 확인 화면과 비교하세요. 번호는 자신의 예약에 맞춰 생성되며 스크린샷에서 복사할 값이 아닙니다.
머리글의 All workshops를 사용하여 Sunset Walk를 다시 여세요. 전체 페이지에 15 Nov 2026, 16:00, East Gate, EUR 6.00이 계속 표시되어야 합니다. Postcard Studio도 실제 남은 정원 안에서 계속 이용할 수 있어야 합니다.
Workspace로 전환하고 예약 모음을 다시 읽으세요.
cat ../bookings.json
원래 두 기록과 앞서 만든 Postcard Studio 예약이 남아 있고, 새 Clay & Coffee 예약이 추가되어 있습니다. 예약 데이터를 과거로 돌리지 않고 버전 관리되는 행사를 수정한 것입니다.
마지막으로 작업 상태를 확인하세요.
git status --short
추적 중인 변경이 남아 있지 않아야 합니다. 개인 메모를 만들었다면 미추적 상태로 두어도 되지만, 사이트에 추가 추적 파일을 포함하지 마세요. 확인 항목은 실제 이력, 공유 저장소 게시, 완전한 실제 페이지, 보존된 기록, 실제 티켓 내용을 검사합니다.
요약
정상적인 예약으로 기대하는 업무 결과를 먼저 확인하고, 이전 커밋에서 접수 문제의 원인을 찾은 뒤 git revert로 필요한 부분만 수정하는 커밋을 추가했습니다. 새 행사, 원래 이력, 기존 예약은 온전히 유지되었습니다.
일반 푸시를 마친 뒤 공유 사이트는 새 예약을 받고 올바른 행사와 가격이 적힌 실제 티켓을 전달했습니다. 독립 챌린지에서는 잘못된 설정이 달라지고 그 뒤에 올바른 커밋이 두 개 이어지므로, 수정 대상을 고르기 전에 처음 전달받은 이력을 살펴보세요.



