학습 자료

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

커밋의 3단계 — 장바구니에 담고 결제합니다 — 디코드랩(DCODELAB)