커밋(Commit)과 푸시(Push)
이 글의 목차
소요: 25분 · 버전: v0.1 (2026-09-30) · 6장
| 이 장의 질문 | 커밋은 무엇을 남기고, 푸시와 풀은 무엇을 하는가 |
|---|---|
| 다루는 것 | 저장·커밋·푸시의 차이, Changes 화면 읽기, 커밋 메모 쓰기, 푸시, 풀(받기) |
| 다루지 않는 것 | 되돌리기(7장), 브랜치(8장) |
| 이 장을 마치면 | 파일을 고쳐 커밋하고 GitHub에 올릴 수 있고, GitHub에 생긴 변경을 내 PC로 받을 수 있습니다 |
1. 저장, 커밋, 푸시는 남는 곳이 다릅니다
| 동작 | 어디에 남나 | 누가 볼 수 있나 |
|---|---|---|
저장 (VS Code에서 Ctrl + S / Cmd + S) | ① 작업 폴더의 파일만 바뀝니다. Git 기록에는 아직 없습니다 | 나 |
| 커밋 | ② 내 PC의 Git 기록에 "이 시점"이 남습니다 | 나 |
| 푸시 | ③ GitHub에 기록이 복사됩니다 | 저장소에 권한이 있는 사람 |
| 풀 | ③에 새로 생긴 기록이 ①② 로 내려옵니다 |
커밋은 돌아올 수 있는 지점을 만드는 것, 푸시는 그 지점을 PC 밖에 보관하는 것입니다. 둘은 짝으로 씁니다.
2. 실습 1: 첫 커밋과 푸시
2-1. VS Code로 파일 고치기
-
GitHub Desktop에서 Current Repository 가
my-first-repo인지 확인합니다. -
메뉴 Repository → Open in Visual Studio Code 를 누릅니다. VS Code가 저장소 폴더를 엽니다.
-
VS Code 왼쪽 파일 목록에서
README.md를 누르고, 내용을 아래처럼 바꿉니다.고치기 전 고친 뒤 # my-first-repo# my-first-repo
(빈 줄)Git 연습용 저장소입니다. -
저장합니다. Windows
Ctrl + S/ MacCmd + S
VS Code가 "이 폴더의 작성자를 신뢰하십니까?"라고 물으면 예, 작성자를 신뢰합니다 를 누릅니다. 내가 만든 폴더라서 괜찮습니다.
2-2. Changes 화면에서 확인하기
GitHub Desktop으로 돌아옵니다. 저장만 했을 뿐인데 Changes 에 README.md 가 나타납니다. Git이 "마지막 커밋 이후 이 파일이 바뀌었다"고 알려 주는 것입니다.
오른쪽에 보이는 것을 diff(차이)라고 합니다. 고치기 전과 후를 줄 단위로 비교해 보여 줍니다.
# my-first-repo
+
+ Git 연습용 저장소입니다.
+로 시작하는 초록색 줄은 추가된 줄,-로 시작하는 빨간색 줄은 지워진 줄입니다.- 한 줄을 고치면 지운 줄(
-)과 추가한 줄(+)이 짝으로 나옵니다.
- Git 연습용 저장소입니다.
+ Git 연습용 저장소입니다. (작성: 홍길동)
커밋하기 전에 이 화면에서 내가 고친 것만 바뀌었는지 봅니다. 이것이 커밋 전 확인입니다.
2-3. 커밋하기
- 왼쪽 아래 Summary 칸에 한 줄 메모를 씁니다. 예:
README에 저장소 소개 추가 - 파란 Commit 1 file to main 버튼을 누릅니다. 버튼에 적힌
main은 지금 기록하는 줄(브랜치)의 이름입니다. 브랜치는 8장에서 다룹니다.
Changes가 비고 No local changes 가 보이면 커밋이 된 것입니다. History 탭을 누르면 맨 위에 방금 만든 커밋이 있습니다.
커밋 메모는 이렇게 씁니다
나중에 History 목록만 보고도 무엇을 했는지 알 수 있게 "무엇을 왜" 한 줄로 씁니다.
| 좋은 예 | 좋지 않은 예 |
|---|---|
README에 저장소 소개 추가 | 수정 |
회의록 양식에 참석자 칸 추가 | 최종, ㅁㄴㅇㄹ |
날짜가 하루 밀려 나오는 문제 수정 | asdf |
2-4. 푸시하기
커밋은 아직 내 PC에만 있습니다. 위쪽 오른쪽 버튼이 Push origin 으로 바뀌어 있습니다.
- Push origin 을 누릅니다.
- 버튼이 다시 Fetch origin 으로 바뀌면 올라간 것입니다.
- 메뉴 Repository → View on GitHub 로 브라우저를 열면
README.md에 새 문장이 보입니다. 파일 목록 위의 커밋 수(예: 2 Commits)를 누르면 커밋 목록도 볼 수 있습니다.
3. 실습 2: 새 파일 만들고 커밋하기
파일을 새로 만드는 것도 똑같이 기록됩니다.
-
VS Code 왼쪽 파일 목록 위의 새 파일 아이콘을 누르고, 이름을
회의록-양식.md로 입력합니다. -
아래 내용을 붙여 넣고 저장합니다.
# 회의록 양식 - 일시: - 참석자: - 안건: - 결정 사항: -
GitHub Desktop의 Changes에
회의록-양식.md가 보입니다. 새 파일이라 모든 줄이+입니다. -
메모
회의록 양식 추가로 커밋하고, Push origin 을 누릅니다.
한 번에 하나씩 커밋합니다. README 수정과 회의록 양식 추가를 한 커밋에 섞으면, 나중에 하나만 되돌리기 어렵습니다. 한 가지 일이 끝날 때마다 커밋하세요.
4. 실습 3: GitHub에서 바뀐 내용 받기 (풀)
혼자 쓰는 저장소라도 다른 PC에서 작업하거나 다른 사람이 고치면, GitHub 쪽에 내 PC에 없는 기록이 생깁니다. 이번에는 GitHub 웹사이트에서 직접 고쳐서 그 상황을 만들어 봅니다.
웹사이트에서 파일을 고치는 것은 이 연습을 위해서입니다. 평소 작업은 내 PC에서 하고 커밋·푸시합니다.
- 브라우저의 저장소 화면에서
README.md를 누릅니다. - 오른쪽 위 연필 아이콘(Edit this file)을 누릅니다.
- 맨 아래에
웹에서 추가한 줄을 한 줄 추가하고, Commit changes… 를 누릅니다. - 메모 칸에
웹에서 한 줄 추가를 쓰고 Commit changes 를 누릅니다. 이 커밋은 GitHub에만 있습니다.
이제 GitHub Desktop으로 돌아와 받습니다.
- 위쪽 오른쪽의 Fetch origin 을 누릅니다. GitHub에 새 커밋이 있는지 확인만 하는 버튼입니다.
- 버튼이 Pull origin(↓1)으로 바뀝니다. 누릅니다.
- VS Code에서
README.md를 보면웹에서 추가한 줄이 들어와 있습니다. History 맨 위에도웹에서 한 줄 추가가 보입니다.
Fetch를 눌러도 Pull origin으로 바뀌지 않으면 받을 것이 없다는 뜻입니다. 정상입니다.
5. 작업을 시작할 때 습관
앞으로 작업할 때마다 이 순서로 시작합니다.
- Current Repository 가 작업할 저장소인지 확인합니다.
- Fetch origin 을 누릅니다.
- Pull origin 으로 바뀌면 누릅니다. 바뀌지 않으면 그대로 진행합니다.
- 작업합니다 → 확인 → 커밋 → 푸시.
받기(Pull)는 작업을 시작하기 전, Changes가 비어 있을 때 하는 것이 가장 안전합니다. 커밋하지 않은 변경을 들고 받으면 GitHub Desktop이 어떻게 할지 묻는 창을 띄울 수 있습니다.
6. 커밋에 담기지 않는 것
- 체크를 끈 파일: Changes 목록에서 파일 옆 체크를 끄면 그 파일은 이번 커밋에서 빠집니다. 변경은 내 PC에 그대로 남아 있습니다. 평소에는 모두 체크된 상태로 둡니다.
- Git이 무시하도록 설정한 파일: 저장소에
.gitignore라는 파일이 있으면, 거기에 적힌 파일은 Changes에 나타나지도 않고 커밋되지도 않습니다. 비밀번호가 담긴 설정 파일처럼 올리면 안 되는 파일에 씁니다. 12장에서 다시 다룹니다.
확인
확인 문제
① VS Code에서 저장만 했습니다. 이 변경은 Git 기록에 남았을까요?
남지 않았습니다. Changes에 보이기만 하고, 커밋해야 기록에 남습니다.② 커밋했는데 GitHub 웹사이트에 보이지 않습니다. 왜 그럴까요?
푸시하지 않았기 때문입니다. Push origin을 누르면 올라갑니다.③ Fetch origin을 눌렀는데 버튼이 그대로입니다. 문제가 있는 걸까요?
아닙니다. GitHub 쪽에 받을 것이 없다는 뜻입니다.자주 발생하는 문제
| 증상 | 확인할 것 |
|---|---|
| 파일을 고쳤는데 Changes에 아무것도 없습니다 | 저장했는지 확인합니다. VS Code 탭 이름 옆에 동그라미(●)가 있으면 저장하지 않은 것입니다. 또는 다른 저장소가 선택되어 있는지 Current Repository 를 봅니다 |
| 커밋 버튼이 눌리지 않습니다 | Summary 칸이 비어 있으면 누를 수 없습니다 |
| Push할 때 오류가 납니다 | 오류 창의 문구를 그대로 두고 캡처합니다. GitHub 쪽에 먼저 받아야 할 커밋이 있다는 안내라면 Pull을 먼저 한 뒤 다시 Push합니다 |
| 이메일이 계정과 다르다는 경고가 나옵니다 | 4장 "안내를 놓쳤을 때"의 Git 설정에서 계정 이메일을 고릅니다 |