학습 자료

커밋의 3단계 — 장바구니에 담고 결제합니다


Article

5강에서 memo.txt 를 만들고 git status 를 쳤더니 Untracked 라는 말이 나왔습니다. 이번 시간에 그 상태를 넘겨서 첫 기록을 남깁니다.

그런데 순서를 하나 바꿔서 갑니다. 제대로 하는 법을 먼저 알려주지 않고, 일부러 틀리게 해보겠습니다. 이 자리는 거의 모든 사람이 한 번은 걸리는 곳이라, 미리 걸려보고 넘어가는 편이 낫습니다.

일부러 한 번 막혀봅니다

기록을 남기는 명령어는 git commit 입니다. 5강에서 만든 폴더에서 그대로 쳐봅니다.

Git Bash
  • $ git commit -m "첫 기록"
  • On branch master
  • No commits yet
  • Untracked files:
  • (use "git add <file>..." to include in what will be committed)
  • memo.txt
  • nothing added to commit but untracked files present (use "git add" to track)

파일은 분명히 있는데 아무것도 기록되지 않았습니다. 마지막 줄이 이유를 말해줍니다. nothing added to commit — 결제할 것이 하나도 없다는 뜻입니다.

파일이 있는데 왜 없다고 할까요. 여기서 비유가 필요합니다.

인터넷 쇼핑과 똑같습니다

쇼핑몰에서 물건을 삽니다. 상품 페이지를 아무리 오래 들여다봐도 결제창에는 아무것도 안 뜹니다. 마음에 든 물건을 장바구니에 담아야 결제 대상이 됩니다. 그리고 결제 버튼을 누르는 순간 그 목록이 주문 하나로 확정되고, 장바구니는 비워집니다.

깃이 정확히 이 순서로 돌아갑니다. 폴더에 파일이 있는 것은 진열대에 물건이 있는 것일 뿐입니다. 담지 않았으니 결제할 게 없다고 하는 겁니다.

기록이 남기까지 거치는 세 자리
  1. 폴더진열대 — 파일을 만들고 고치는 곳. 여기 있다고 기록되지 않는다
  2. 스테이지장바구니 — 이번에 기록할 것만 골라 담아두는 곳
  3. 저장소결제 완료 — 기록으로 확정된다. 장바구니는 비워진다
add 로 담고, commit 으로 결제한다. 이 두 걸음이 깃의 기본 리듬이다

세 자리에 붙은 이름이 자료마다 조금씩 다릅니다. 지금은 비유로 기억해두면 충분하고, 뒤에서 영어 단어를 만났을 때 알아볼 수만 있으면 됩니다.

부르는 이름 정리
비유우리말영어로 보이는 것옮기는 명령어
진열대작업 폴더Working Directory—
장바구니스테이지Staged · Indexgit add
결제 완료저장소Repository · Commitgit commit
git status 에 나오는 영어를 이 표로 되짚으면 대부분 읽힌다

담습니다 — git add

장바구니에 담아봅니다. 이번에는 add 를 먼저 칩니다.

Git Bash
  • $ git add memo.txt
  • $ git status
  • On branch master
  • No commits yet
  • Changes to be committed:
  • (use "git rm --cached <file>..." to unstage)
  • new file: memo.txt

add 자체는 아무 말도 안 합니다. 4강에서 말한 대로 잘 되면 조용합니다. 대신 git status 의 문장이 바뀌었습니다.

Untracked files 였던 자리가 Changes to be committed 로 바뀌었습니다. "기록될 예정인 것들"이라는 뜻입니다. 장바구니에 담긴 상태입니다.

add 전후로 git status 가 하는 말

담기 전

  • Untracked files:
  • 깃이 보긴 했지만 담지는 않았다
  • 이대로 commit 하면 아무것도 안 남는다

담은 뒤

  • Changes to be committed:
  • 이번 기록에 들어갈 목록이다
  • 이제 commit 이 통한다
git status 는 "지금 어느 단계에 있나" 를 알려주는 명령이다

결제합니다 — git commit

이제 아까 실패했던 명령을 그대로 다시 칩니다.

Git Bash
  • $ git commit -m "메모 파일 추가"
  • [master (root-commit) 3f2a1b9] 메모 파일 추가
  • 1 file changed, 1 insertion(+)
  • create mode 100644 memo.txt

기록이 하나 남았습니다. 1강에서 말한 세이브 슬롯 한 칸이 이렇게 찍힙니다. 이 한 칸을 커밋이라고 부릅니다.

출력이 낯설어 보이지만 뜯어보면 별것 없습니다.

커밋 결과 읽기
조각뜻
master가지 이름. 21강에서 다룬다
root-commit이 저장소의 첫 커밋이라는 표시. 처음 한 번만 나온다
3f2a1b9이 커밋에 붙은 번호. 7강에서 다시 만난다
메모 파일 추가내가 적은 메시지
1 file changed, 1 insertion(+)파일 1개, 추가된 줄 1개
번호는 매번 다르게 나온다. 화면에 찍힌 것과 달라도 정상이다

결제가 끝났으니 장바구니는 비워졌을 것입니다. 확인해 봅니다.

Git Bash
  • $ git status
  • On branch master
  • nothing to commit, working tree clean

working tree clean — 폴더와 마지막 기록이 똑같다는 뜻입니다. 고친 게 없다는 말입니다. 이 문장이 나오면 지금까지 한 일이 전부 안전하게 남았다는 신호라서, 앞으로 자주 보게 됩니다.

왜 굳이 두 번 시키나

여기서 한 번쯤 이런 생각이 듭니다. 어차피 다 기록할 건데 왜 담는 단계를 따로 두는가.

파일을 하나만 고칠 때는 확실히 번거롭습니다. 그런데 파일 다섯 개를 고쳤고 그중 셋만 이번 기록에 넣고 싶을 때, 담는 단계가 없으면 방법이 없습니다. 골라 담을 수 있다는 것이 이 단계의 존재 이유입니다.

파일이 여러 개일 때 하나씩 치는 대신 점 하나로 한 번에 담을 수도 있습니다. git add . 입니다. 지금 폴더 안에서 바뀐 것을 전부 담으라는 뜻입니다. 편하지만, 넣으면 안 되는 파일까지 같이 딸려 들어가기 쉽습니다. 9강에서 이걸 막는 방법을 배우기 전까지는 파일 이름을 직접 치는 편이 안전합니다.

한 번 더 해봅니다

같은 흐름을 한 번 더 돌려보면 몸에 붙습니다. memo.txt 를 열어 두 번째 줄을 아무거나 쓰고 저장한 다음, add 하고 commit 합니다.

두 번째 커밋 남기기
  1. 01

    memo.txt 에 한 줄 더 쓰고 저장합니다

    내용은 아무거나 좋습니다. 저장을 꼭 합니다

  2. 02

    git status 로 확인합니다

    이번에는 Untracked 가 아니라 Changes not staged for commit 아래에 modified: memo.txt 로 나옵니다. 새 파일이 아니라 고친 파일이기 때문입니다

  3. 03

    git add memo.txt

    담습니다

  4. 04

    git commit -m "메모에 한 줄 추가"

    결제합니다. 이번에는 root-commit 이라는 말이 안 나옵니다

새 파일은 new file, 고친 파일은 modified 로 표시된다. 나머지 흐름은 똑같다

이제 이 폴더에 커밋이 두 개 쌓였습니다. 쌓인 기록을 어떻게 들여다보는지는 다음 강의 내용입니다.

정리하면

  • 파일이 폴더에 있다고 기록되지 않습니다. 담아야 결제됩니다
  • 세 자리를 오갑니다. 폴더(진열대) → 스테이지(장바구니) → 저장소(결제 완료)
  • git add 파일이름 으로 담고, git commit -m "메시지" 로 확정합니다
  • git status 는 지금 어느 단계에 있는지 알려줍니다. 막히면 제일 먼저 칩니다
  • Untracked 는 안 담긴 새 파일, Changes to be committed 는 담긴 것, working tree clean 은 전부 기록된 상태입니다
  • 담는 단계가 따로 있는 이유는 골라 담기 위해서입니다
  • -m 을 빠뜨리면 편집기가 열립니다. Vim 이면 :q! 로 빠져나옵니다

다음 7강에서는 쌓인 기록을 읽습니다. 카톡 대화를 위로 스크롤하는 것과 같습니다. 언제 무슨 커밋을 남겼는지 목록으로 보고, 한 커밋에서 정확히 어느 줄이 어떻게 바뀌었는지까지 봅니다. 방금 남긴 커밋 두 개가 그 실습 재료가 됩니다.

Share
  • Git
  • 커밋
  • 스테이지
  • 입문