라이프스타일

Git, 브랜치, diff와 복원

Git은 파일 이력, 브랜치는 변경 묶음, diff는 차이를 관리합니다. 대화를 재개한다고 파일이 복원되지는 않습니다.

읽는 데 약 15분 · 실습 30 분

작업 흐름을 설명하는 그림이며 제품 스크린샷이 아닙니다.
사진: Mokaair (© Mokaair)
전체 목차:Codex 학습 센터: 전체 튜토리얼 목차

실습 · Desktop / CLI / VS Code / JetBrains

이 글의 목차
  1. 목표와 준비
  2. 1단계: 독립 기준 만들기
  3. 2단계: 브랜치에서 구별할 두 변경
  4. 3단계: 한 파일 스테이지 후 복원 연습
  5. 4단계: 제한 commit과 기록을 남긴 취소
  6. 명령 비교, 문제 해결과 검수

목표와 준비

를 확인합니다. 작업 트리, 다음 commit용 index, 기록 버전은 별개입니다. 브랜치는 기록 줄이며 미커밋 사본이 아닙니다. 별도 경로는 를 쓰고 브랜치를 백업 완료로 보지 않습니다.

1단계: 독립 기준 만들기

다른 프로젝트 밖 codex-git-lab에 expected 다섯 파일을 두고 Windows PowerShell은 Get-Location, macOS/Linux는 pwd로 현재 경로를 확인하고 git --version을 실행합니다. 없으면 공식 OS 설치 후 터미널을 다시 엽니다. 기존 작업 저장소에서 이 초기화를 하지 않습니다.

터미널: 독립 Git 기준 · sh
git init -b main
git config user.name "Practice Learner"
git config user.email "learner@example.invalid"
git add index.html style.css app.js core.mjs core.test.mjs
git diff --cached --name-only
git commit -m "Add practice baseline"
git status --short

줄별 실행해 처음 다섯 파일과 commit 후 무변경을 확인합니다. 이름/예약 도메인은 실습 내 설정이며 GitHub 인증/global이 아닙니다. 기존 서명/hooks 요구면 따르거나 장애를 기록하고 전체 정책을 바꾸지 않습니다.

2단계: 브랜치에서 구별할 두 변경

터미널: 브랜치 생성 · sh
git switch -c codex/title-lab
git branch --show-current

codex/title-lab을 확인한 뒤 index.html의 h1 문구 Make room for one small task.만 Plan one useful step.으로 바꾸고 CSS 끝에 다음 주석으로 별도 미커밋 작업을 흉내 냅니다. 결과는 제목이며 CSS는 보존하되 제목 commit에 섞지 않습니다. 둘 다 실습입니다.

파일에 추가: style.css · css
/* KEEP-MY-NOTE */
터미널: 차이 확인 · sh
git status --short
git diff -- index.html style.css

차이의 이전/새 줄과 주변을 보고 h1/CSS 주석만인지 확인합니다. 파일 수만으로 판단하지 않습니다. 다음 읽기 요청으로 기존 작업/대상을 식별하며 전체 차이 commit은 요청하지 않습니다.

Codex 프롬프트: 읽기 전용 범위 확인 · text
Inspect this lab's current branch, status and diff without editing, staging or committing. The intended change is only the h1 title in index.html. The KEEP-MY-NOTE comment in style.css represents separate work and must be preserved. Explain what belongs in the title commit and what must stay outside it.

3단계: 한 파일 스테이지 후 복원 연습

터미널: 지정 파일만 스테이징 · sh
git add index.html
git diff --cached --name-only
git diff --cached -- index.html
git diff -- style.css

이제 같은 파일의 두 버전을 비교합니다. git add를 다시 실행하지 말고 편집기에서 스테이징한 Plan one useful step.만 Compare one useful step.으로 바꿉니다. 아래 네 줄로 작업 트리, 인덱스, HEAD의 차이를 확인합니다.

터미널: 같은 파일의 스테이징 및 미스테이징 차이 · sh
git status --short
git diff --cached -- index.html
git diff -- index.html
git show :index.html

status에는 MM index.html과 미스테이징 style.css가 나와야 합니다. 이는 충돌이 아닙니다. Git status 공식 설명에 따르면 이 경우 첫 M은 HEAD 대비 인덱스 변경, 두 번째 M은 인덱스 대비 작업 트리 변경입니다. cached diff는 Make → Plan, 일반 diff는 Plan → Compare이고 show :index.html은 스테이징된 Plan을 읽습니다. 지금 일반 커밋을 해도 Compare가 자동으로 포함되지는 않습니다.

이어서 두 restore 명령을 원래 순서대로 실행합니다. 첫 줄은 스테이징만 해제하므로 디스크에 Compare가 남습니다. 둘째 줄은 이제 원래 제목이 들어 있는 인덱스에서 index.html을 복원합니다. 첫 줄을 건너뛰면 worktree restore는 스테이징된 Plan을 복원하므로 결과가 다릅니다. Git restore 공식 설명에 이 기본 원본 차이가 나옵니다. 버릴 대상이 연습용 제목인지 확인하고 CSS는 보존합니다.

터미널: 스테이징 해제 후 복원 · sh
git restore --staged -- index.html
git restore --worktree -- index.html
git status --short
git diff -- style.css

CSS만 변경/h1 복원/주석 보존을 확인합니다. 자기 취소로 별도 작업을 지우지 않습니다. --staged는 실제 편집을 버리지 않고 --worktree는 지정 파일을 복원 원본으로 덮으므로 다릅니다.

4단계: 제한 commit과 기록을 남긴 취소

제목을 다시 바꾸고 index.html만 스테이지해 차이를 봅니다. commit은 제목만, CSS는 미커밋으로 둡니다. show로 실제 대상을 확인하며 명령 성공만으로 범위가 맞다고 보지 않습니다.

터미널: 제목 확인 및 커밋 · sh
git add index.html
git diff --cached --name-only
git diff --cached -- index.html
git commit -m "Update practice title"
git show --format=short --name-only HEAD
git status --short

취소 전 작업 트리를 확인합니다. 남은 실습 CSS 주석 보존을 검증한 뒤 이번에는 명시적으로 연습을 끝내 첫 명령으로 그 파일만 되돌립니다. 무변경과 HEAD 제목 commit을 확인해 revert합니다. 실제 별도 변경에는 그대로 적용하지 않습니다.

터미널: 메모 연습 종료 및 커밋 되돌리기 · sh
git restore --worktree -- style.css
git status --short
git log -1 --oneline
git revert --no-edit HEAD
git log -3 --oneline
git status --short

revert는 원래 변경을 남기고 반대 commit을 추가합니다. 이전 h1/기록3개/무변경을 기대합니다. 충돌이면 상태를 읽고 강제 선택하지 않습니다. 미완료 revert 취소는 git revert --abort 절차로 하고 재확인합니다.

명령 비교, 문제 해결과 검수

목적명령확인
미스테이지 보기git diff작업 트리/index
다음 commit 보기git diff --cachedindex/HEAD
스테이지 해제git restore --staged -- index.html편집 유지
지정 미커밋 변경 버리기git restore --worktree -- index.html원본/경로 먼저 확인
commit 취소git revert --no-edit HEAD대상/무변경 확인, 기록 추가

브랜치가 없으면 repository를 확인하고 예상 밖 파일을 add .로 묶지 않습니다. 한 파일에 변경이 섞이면 전체 스테이지에 모두 들어가므로 각 차이를 이해해 처리합니다. CSS 제외/두 restore/revert 기록이 검수 조건입니다. 그림1상태,2제한확정,3복원확인. 다음은 입니다.

19. Git, 브랜치, diff와 복원 — 작업 흐름을 설명하는 그림이며 제품 스크린샷이 아닙니다. Branch → Diff → Commit
19. Git, 브랜치, diff와 복원 — 작업 흐름을 설명하는 그림이며 제품 스크린샷이 아닙니다. Branch → Diff → Commit · 사진: Mokaair (© Mokaair)
자세한 설명 보기

Branch to Diff to Commit

전체 목차

  • 라이프스타일

    Codex 학습 센터: 전체 튜토리얼 목차

    설치와 첫 작업부터 MD 지침과 고급 연동까지 60개 강의, 열 개 단원을 계획합니다. 수준, 환경, 목표, 명령으로 다음 글을 찾고 미게시 항목의 상태를 확인할 수 있습니다.

  • 라이프스타일

    실습: 작은 웹사이트 만들기

    brief.md에서 Small Steps 할 일 사이트를 계획하고 추가·완료·삭제·필터·로컬 저장을 구현합니다. HTML·CSS·데이터 함수·화면 이벤트·시험을 분리하고 Node와 브라우저로 검증한 뒤 재시작·복원 인계 기록을 남깁니다.

  • 라이프스타일

    사용량과 효율: 재작업 줄이기

    조건, 모델 선택, 시간, 결과를 기록해 불필요한 재시도와 과도한 문맥을 줄입니다.

최신 여행 소식·가이드

출처

라이프스타일