학습 자료

기록 읽기 — 위로 스크롤해서 지난 대화를 봅니다


Article

6강에서 커밋을 두 개 남겼습니다. 메모 파일 추가 하나, 메모에 한 줄 추가 하나. 남기긴 남겼는데, 그게 어디에 어떤 모양으로 쌓였는지는 아직 못 봤습니다.

기록은 쌓는 것보다 읽는 것이 목적입니다. 이번 시간에 쌓아둔 것을 꺼내 봅니다.

카톡을 위로 스크롤할 때 하는 두 가지

단톡방에서 지난 이야기를 찾을 때를 떠올려봅니다. 손가락으로 쭉 올리면서 훑습니다. 누가 언제 뭐라고 했는지 목록으로 지나갑니다. 그러다 눈에 걸리는 게 있으면 거기서 멈추고 그 메시지 하나를 자세히 읽습니다.

깃에서도 이 두 가지를 따로 합니다. 목록을 훑는 명령이 하나, 한 지점을 자세히 보는 명령이 하나 있습니다.

읽는 방법이 두 갈래다

git log

훑어보기

  • 지금까지 남긴 커밋을 목록으로 본다
  • 언제 · 누가 · 무슨 메시지로 남겼는지
  • 카톡 대화를 위로 스크롤하는 것

git diff

자세히 보기

  • 어느 줄이 어떻게 바뀌었는지 본다
  • 지운 줄과 넣은 줄을 짝으로 보여준다
  • 메시지 하나를 눌러 길게 읽는 것
이번 강에서 배울 것은 이 두 개가 전부다

목록부터 봅니다

5강에서 만든 폴더에서 git log 를 칩니다.

Git Bash
  • $ git log
  • commit 8f4c2a1b9e0d3f5a7c1e6b2d4a8f0c3e5b7d9a1f (HEAD -> master)
  • Author: hong <hong@example.com>
  • Date: Thu Aug 6 14:22:10 2026 +0900
  • 메모에 한 줄 추가
  • commit 3e9b7d1a5c8f2e4b6a0d9c3f7e1b5a8d2c4f6e0b
  • Author: hong <hong@example.com>
  • Date: Thu Aug 6 14:05:33 2026 +0900
  • 메모 파일 추가

두 덩어리가 보입니다. 커밋 하나가 덩어리 하나입니다. 그리고 최근 것이 맨 위입니다. 카톡과 반대라 처음엔 조금 헷갈리는데, 깃은 늘 최신을 위에 놓습니다.

덩어리 안의 네 줄이 각각 뭔지 봅니다.

커밋 하나에 들어 있는 정보
지금 알아둘 것
commit 8f4c2a1...이 커밋의 이름표40자짜리 이 값이 커밋의 주민등록번호다. 앞 7자리만 써도 통한다
Author:누가 남겼나2강에서 설정한 user.name · user.email 이 여기 찍힌다
Date:언제 남겼나커밋한 시각이다
들여쓴 한 줄커밋 메시지-m 뒤에 적었던 그 문장이다. 10강에서 이걸 잘 쓰는 법을 다룬다
8f4c2a1... 값은 사람마다 전부 다르다. 화면에 나온 값이 이 글과 달라도 정상이다

Author 줄에 찍힌 이름과 메일이 낯설다면 2강의 설정을 다시 확인해봅니다. 지금은 그냥 넘어가도 되지만, 이 메일이 깃허브 계정 메일과 다르면 나중에 문제가 됩니다. 16강에서 그 증상을 자세히 다룹니다.

목록이 길어지면 한 줄씩 봅니다

커밋이 스무 개쯤 쌓이면 위 형식은 너무 깁니다. 한 커밋에 여섯 줄씩 잡아먹어서 훑기가 어렵습니다. 그래서 한 줄로 줄여 보는 옵션이 따로 있습니다.

Git Bash
  • $ git log --oneline
  • 8f4c2a1 (HEAD -> master) 메모에 한 줄 추가
  • 3e9b7d1 메모 파일 추가

같은 정보를 압축한 것입니다. 앞의 일곱 자리가 커밋 이름표, 뒤가 메시지입니다. 실무에서는 git log 보다 이쪽을 훨씬 자주 씁니다. 지금까지 뭘 했는지 훑는 데는 이걸로 충분하기 때문입니다.

(HEAD -> master) 는 지금 내가 서 있는 자리를 표시한 것입니다. 21강에서 브랜치를 배우면 이 표시가 의미를 갖습니다. 지금은 "제일 최근 커밋에 내가 서 있구나" 정도로 보고 넘어갑니다.

쌓인 순서와 보이는 순서
  1. 메모 파일 추가먼저 남긴 커밋 — 목록의 아래쪽에 나온다
  2. 메모에 한 줄 추가나중에 남긴 커밋 — 목록의 위쪽에 나온다
  3. 지금 여기HEAD 가 가리키는 자리. 다음 커밋은 여기 위에 쌓인다
기록은 아래에서 위로 쌓이고, 화면에는 위에서 아래로 읽힌다

이번엔 자세히 봅니다

목록은 "무슨 일이 있었나"까지만 알려줍니다. "정확히 어느 줄이 바뀌었나"는 안 나옵니다. 그걸 보는 게 git diff 입니다.

보려면 먼저 바뀐 게 있어야 합니다. memo.txt 를 열어 세 번째 줄을 추가하고 저장합니다.

실습 준비 — 한 줄 추가하고 저장
  1. 01

    memo.txt 를 엽니다

    5강에서 쓰던 그 파일입니다. 지금 두 줄이 들어 있습니다

  2. 02

    세 번째 줄에 한 문장 씁니다

    내용은 아무거나 좋습니다. 이 글에서는 오늘은 기록을 읽어봅니다 로 하겠습니다

  3. 03

    저장합니다

    저장을 안 하면 아무 일도 일어나지 않습니다. 파일에 실제로 써져야 깃이 알아챕니다

  4. 04

    git add 는 아직 치지 않습니다

    지금은 담기 전 상태로 두어야 diff 가 보입니다. 이유는 아래에서 설명합니다

이제 git diff 를 칩니다.

Git Bash
  • $ git diff
  • diff --git a/memo.txt b/memo.txt
  • index 2f8a9c1..7b3e5d4 100644
  • --- a/memo.txt
  • +++ b/memo.txt
  • @@ -1,2 +1,3 @@
  • 안녕하세요
  • 오늘부터 깃을 배웁니다
  • +오늘은 기록을 읽어봅니다

기호가 많아서 처음엔 눈이 튕깁니다. 그런데 실제로 볼 줄은 두세 줄뿐입니다.

diff 에서 볼 것과 안 볼 것
봐야 하나
diff --git ...안 봐도 된다어느 파일 이야기인지 알리는 머리말
index 2f8a9c1..안 봐도 된다깃 내부용 값이다. 신경 쓸 일이 없다
--- a/memo.txt안 봐도 된다a 는 고치기 전, b 는 고친 뒤라는 표시
@@ -1,2 +1,3 @@가볍게1번째 줄부터 보여준다는 뜻. 전에는 2줄, 지금은 3줄
맨 앞이 빈칸인 줄참고안 바뀐 줄이다. 위치를 알라고 같이 보여준다
맨 앞이 + 인 줄여기새로 들어간 줄
맨 앞이 - 인 줄여기빠진 줄
+- 붙은 줄만 보면 된다. 나머지는 배경이다

줄을 고치면 어떻게 보이나

방금은 줄을 추가만 해서 + 만 나왔습니다. 있던 줄을 고치면 어떻게 보이는지도 한 번 봅니다. memo.txt 의 두 번째 줄을 다른 문장으로 바꾸고 저장한 뒤 다시 git diff 를 칩니다.

Git Bash
  • $ git diff
  • diff --git a/memo.txt b/memo.txt
  • index 2f8a9c1..c4d1e08 100644
  • --- a/memo.txt
  • +++ b/memo.txt
  • @@ -1,2 +1,3 @@
  • 안녕하세요
  • -오늘부터 깃을 배웁니다
  • +오늘부터 깃을 제대로 배웁니다
  • +오늘은 기록을 읽어봅니다

-+짝으로 나왔습니다. 여기서 오해가 하나 생깁니다.

add 하면 diff 가 비어 보입니다

여기가 이번 강에서 제일 많이 걸리는 자리입니다. 바뀐 걸 확인했으니 6강에서 배운 대로 담아봅니다.

Git Bash
  • $ git add memo.txt
  • $ git diff
  • $

아무것도 안 나옵니다. 방금 고친 게 사라진 것 같아서 당황합니다. 그런데 사라진 게 아닙니다.

git diff 는 기본적으로 진열대와 장바구니 사이만 비교합니다. 6강의 장바구니 비유를 그대로 씁니다. add 로 담는 순간 진열대의 물건과 장바구니의 물건이 똑같아졌으니, 둘 사이에는 차이가 없는 게 맞습니다.

담은 것을 보려면 비교할 자리를 바꿔줘야 합니다.

무엇과 무엇을 비교하는가

git diff

폴더 ↔ 스테이지

  • 아직 담지 않은 변경을 본다
  • add 하면 결과가 비어버린다
  • "뭘 고쳤더라" 할 때 쓴다

git diff --staged

스테이지 ↔ 마지막 커밋

  • 담아둔 변경을 본다
  • add 뒤에는 이쪽을 쳐야 보인다
  • "이대로 커밋해도 되나" 확인할 때 쓴다
결과가 비었다고 변경이 사라진 게 아니다. 보는 자리가 다를 뿐이다

git diff --staged 를 치면 방금 담은 내용이 그대로 나옵니다. 담긴 게 맞는지 확인했으면 커밋합니다.

확인하고 커밋까지
  1. 01

    git diff --staged

    담긴 게 내가 의도한 것인지 눈으로 봅니다

  2. 02

    git commit -m "메모 내용 다듬고 한 줄 추가"

    확정합니다

  3. 03

    git log --oneline

    커밋이 세 개가 됐는지 봅니다. 새 줄이 맨 위에 붙어 있으면 성공입니다

커밋 직전에 --staged 로 한 번 보는 습관은 실무에서 끝까지 간다

정리하면

  • git log 는 커밋 목록입니다. 최근 것이 맨 위에 나옵니다
  • 커밋 하나마다 이름표(8f4c2a1...) · 작성자 · 시각 · 메시지가 붙습니다
  • 화면 아래에 : 가 뜨고 안 빠져나와지면 q 를 누릅니다
  • git log --oneline 은 한 줄 요약입니다. 실무에서는 이쪽을 더 자주 씁니다
  • git diff어느 줄이 바뀌었는지 보여줍니다. +- 붙은 줄만 보면 됩니다
  • 깃은 "고쳤다"를 모릅니다. 줄을 고치면 -+ 가 짝으로 나옵니다
  • add 뒤에는 git diff 가 비어 보입니다. 그때는 git diff --staged 를 칩니다
  • status · diff · log 셋은 아무것도 안 망가뜨립니다. 마음 놓고 칩니다

다음 8강에서는 되돌립니다. 파일을 잘못 고쳤는데 저장까지 해버려서 Ctrl+Z 가 안 먹는 상황, 아예 파일을 지워버린 상황을 일부러 만들어봅니다. 그리고 커밋을 남겨뒀다는 이유 하나로 그게 어떻게 살아 돌아오는지 봅니다. 오늘 읽는 법을 배웠으니, 다음 시간에는 그걸 되감아봅니다.

기록 읽기 — 위로 스크롤해서 지난 대화를 봅니다 — 디코드랩(DCODELAB)