기록 읽기 — 위로 스크롤해서 지난 대화를 봅니다
Article
6강에서 커밋을 두 개 남겼습니다. 메모 파일 추가 하나, 메모에 한 줄 추가 하나. 남기긴 남겼는데, 그게 어디에 어떤 모양으로 쌓였는지는 아직 못 봤습니다.
기록은 쌓는 것보다 읽는 것이 목적입니다. 이번 시간에 쌓아둔 것을 꺼내 봅니다.
카톡을 위로 스크롤할 때 하는 두 가지
단톡방에서 지난 이야기를 찾을 때를 떠올려봅니다. 손가락으로 쭉 올리면서 훑습니다. 누가 언제 뭐라고 했는지 목록으로 지나갑니다. 그러다 눈에 걸리는 게 있으면 거기서 멈추고 그 메시지 하나를 자세히 읽습니다.
깃에서도 이 두 가지를 따로 합니다. 목록을 훑는 명령이 하나, 한 지점을 자세히 보는 명령이 하나 있습니다.
git log
훑어보기
- 지금까지 남긴 커밋을 목록으로 본다
- 언제 · 누가 · 무슨 메시지로 남겼는지
- 카톡 대화를 위로 스크롤하는 것
git diff
자세히 보기
- 어느 줄이 어떻게 바뀌었는지 본다
- 지운 줄과 넣은 줄을 짝으로 보여준다
- 메시지 하나를 눌러 길게 읽는 것
목록부터 봅니다
5강에서 만든 폴더에서 git log 를 칩니다.
- $ 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강에서 이걸 잘 쓰는 법을 다룬다 |
Author 줄에 찍힌 이름과 메일이 낯설다면 2강의 설정을 다시 확인해봅니다. 지금은 그냥 넘어가도 되지만, 이 메일이 깃허브 계정 메일과 다르면 나중에 문제가 됩니다. 16강에서 그 증상을 자세히 다룹니다.
목록이 길어지면 한 줄씩 봅니다
커밋이 스무 개쯤 쌓이면 위 형식은 너무 깁니다. 한 커밋에 여섯 줄씩 잡아먹어서 훑기가 어렵습니다. 그래서 한 줄로 줄여 보는 옵션이 따로 있습니다.
- $ git log --oneline
- 8f4c2a1 (HEAD -> master) 메모에 한 줄 추가
- 3e9b7d1 메모 파일 추가
같은 정보를 압축한 것입니다. 앞의 일곱 자리가 커밋 이름표, 뒤가 메시지입니다. 실무에서는 git log 보다 이쪽을 훨씬 자주 씁니다. 지금까지 뭘 했는지 훑는 데는 이걸로 충분하기 때문입니다.
(HEAD -> master) 는 지금 내가 서 있는 자리를 표시한 것입니다. 21강에서 브랜치를 배우면 이 표시가 의미를 갖습니다. 지금은 "제일 최근 커밋에 내가 서 있구나" 정도로 보고 넘어갑니다.
- 메모 파일 추가먼저 남긴 커밋 — 목록의 아래쪽에 나온다
- 메모에 한 줄 추가나중에 남긴 커밋 — 목록의 위쪽에 나온다
- 지금 여기
HEAD가 가리키는 자리. 다음 커밋은 여기 위에 쌓인다
이번엔 자세히 봅니다
목록은 "무슨 일이 있었나"까지만 알려줍니다. "정확히 어느 줄이 바뀌었나"는 안 나옵니다. 그걸 보는 게 git diff 입니다.
보려면 먼저 바뀐 게 있어야 합니다. memo.txt 를 열어 세 번째 줄을 추가하고 저장합니다.
- 01
memo.txt를 엽니다5강에서 쓰던 그 파일입니다. 지금 두 줄이 들어 있습니다
- 02
세 번째 줄에 한 문장 씁니다
내용은 아무거나 좋습니다. 이 글에서는
오늘은 기록을 읽어봅니다로 하겠습니다 - 03
저장합니다
저장을 안 하면 아무 일도 일어나지 않습니다. 파일에 실제로 써져야 깃이 알아챕니다
- 04
git add는 아직 치지 않습니다지금은 담기 전 상태로 두어야
diff가 보입니다. 이유는 아래에서 설명합니다
이제 git diff 를 칩니다.
- $ 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 --git ... | 안 봐도 된다 | 어느 파일 이야기인지 알리는 머리말 |
index 2f8a9c1.. | 안 봐도 된다 | 깃 내부용 값이다. 신경 쓸 일이 없다 |
--- a/memo.txt | 안 봐도 된다 | a 는 고치기 전, b 는 고친 뒤라는 표시 |
@@ -1,2 +1,3 @@ | 가볍게 | 1번째 줄부터 보여준다는 뜻. 전에는 2줄, 지금은 3줄 |
| 맨 앞이 빈칸인 줄 | 참고 | 안 바뀐 줄이다. 위치를 알라고 같이 보여준다 |
맨 앞이 + 인 줄 | 여기 | 새로 들어간 줄 |
맨 앞이 - 인 줄 | 여기 | 빠진 줄 |
줄을 고치면 어떻게 보이나
방금은 줄을 추가만 해서 + 만 나왔습니다. 있던 줄을 고치면 어떻게 보이는지도 한 번 봅니다. memo.txt 의 두 번째 줄을 다른 문장으로 바꾸고 저장한 뒤 다시 git diff 를 칩니다.
- $ 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 add memo.txt
- $ git diff
- $
아무것도 안 나옵니다. 방금 고친 게 사라진 것 같아서 당황합니다. 그런데 사라진 게 아닙니다.
git diff 는 기본적으로 진열대와 장바구니 사이만 비교합니다. 6강의 장바구니 비유를 그대로 씁니다. add 로 담는 순간 진열대의 물건과 장바구니의 물건이 똑같아졌으니, 둘 사이에는 차이가 없는 게 맞습니다.
담은 것을 보려면 비교할 자리를 바꿔줘야 합니다.
git diff
폴더 ↔ 스테이지
- 아직 담지 않은 변경을 본다
add하면 결과가 비어버린다- "뭘 고쳤더라" 할 때 쓴다
git diff --staged
스테이지 ↔ 마지막 커밋
- 담아둔 변경을 본다
add뒤에는 이쪽을 쳐야 보인다- "이대로 커밋해도 되나" 확인할 때 쓴다
git diff --staged 를 치면 방금 담은 내용이 그대로 나옵니다. 담긴 게 맞는지 확인했으면 커밋합니다.
- 01
git diff --staged담긴 게 내가 의도한 것인지 눈으로 봅니다
- 02
git commit -m "메모 내용 다듬고 한 줄 추가"확정합니다
- 03
git log --oneline커밋이 세 개가 됐는지 봅니다. 새 줄이 맨 위에 붙어 있으면 성공입니다
정리하면
git log는 커밋 목록입니다. 최근 것이 맨 위에 나옵니다- 커밋 하나마다 이름표(
8f4c2a1...) · 작성자 · 시각 · 메시지가 붙습니다 - 화면 아래에
:가 뜨고 안 빠져나와지면q를 누릅니다 git log --oneline은 한 줄 요약입니다. 실무에서는 이쪽을 더 자주 씁니다git diff는 어느 줄이 바뀌었는지 보여줍니다.+와-붙은 줄만 보면 됩니다- 깃은 "고쳤다"를 모릅니다. 줄을 고치면
-와+가 짝으로 나옵니다 add뒤에는git diff가 비어 보입니다. 그때는git diff --staged를 칩니다status·diff·log셋은 아무것도 안 망가뜨립니다. 마음 놓고 칩니다
다음 8강에서는 되돌립니다. 파일을 잘못 고쳤는데 저장까지 해버려서 Ctrl+Z 가 안 먹는 상황, 아예 파일을 지워버린 상황을 일부러 만들어봅니다. 그리고 커밋을 남겨뒀다는 이유 하나로 그게 어떻게 살아 돌아오는지 봅니다. 오늘 읽는 법을 배웠으니, 다음 시간에는 그걸 되감아봅니다.