포스트

[GitHub 100일 챌린지] Day 29 - git commit으로 저장하기

[GitHub 100일 챌린지] Day 29 - git commit으로 저장하기

100일 챌린지 Day 29 - git commit으로 변경사항을 영구히 저장합니다

배울 내용

  1. git commit 기본 사용법
  2. commit 옵션과 활용법
  3. 커밋 수정과 관리

Topic1. git commit 기본 사용법

git commit = Staging Area → Repository

스테이징된 변경사항을 히스토리에 저장합니다.

기본 커밋

에디터로 커밋:

1
git commit

실행 결과:

1
2
3
4
1. 기본 에디터 열림 (Vim, VS Code 등)
2. 커밋 메시지 입력
3. 저장 후 종료
4. 커밋 완료

한 줄 메시지로 커밋:

1
git commit -m "커밋 메시지"

예시:

1
2
git add feature.js
git commit -m "Add user login feature"

다중 라인 메시지:

1
2
3
git commit -m "Add user login feature" -m "- JWT authentication
- Password hashing
- Session management"

커밋 구조

커밋이 포함하는 정보:

1
2
3
4
5
1. 변경 내용 (스냅샷)
2. 작성자 정보
3. 작성 시간
4. 커밋 메시지
5. 부모 커밋 (이전 커밋)

커밋 확인:

1
2
3
4
5
6
7
8
9
10
11
# 최근 커밋 보기
git log

# 최근 1개만
git log -1

# 간단히 보기
git log --oneline

# 그래프로 보기
git log --graph --oneline

해보기: 첫 커밋 만들기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 1. 새 저장소 초기화
mkdir my-project
cd my-project
git init

# 2. 파일 생성
echo "# My Project" > README.md

# 3. 스테이징
git add README.md

# 4. 커밋
git commit -m "Initial commit"

# 5. 커밋 확인
git log

출력:

1
2
3
4
5
commit abc123def456... (HEAD -> main)
Author: Your Name <your@email.com>
Date:   Mon Jan 29 09:00:00 2025 +0900

    Initial commit

결과: 첫 번째 커밋이 생성되어 히스토리가 시작됩니다


Topic2. commit 옵션과 활용법

다양한 상황에서 사용하는 커밋 옵션들입니다.

add + commit 동시 실행

추적 중인 파일 자동 스테이징:

1
2
3
git commit -a -m "메시지"
# 또는
git commit -am "메시지"

주의사항:

1
2
3
4
5
6
7
8
✅ 수정된 파일 → 자동 스테이징
❌ 새 파일 (Untracked) → 포함 안 됨

따라서:
git add .
git commit -m "message"

보다는 덜 안전

언제 사용?

1
2
3
간단한 수정사항일 때
모든 수정을 한번에 커밋할 때
새 파일이 없을 때

빈 커밋

변경사항 없이 커밋:

1
git commit --allow-empty -m "Empty commit"

사용 예:

1
2
3
- CI/CD 재실행 트리거
- 브랜치 북마크
- 테스트 목적

커밋 날짜 수정

특정 날짜로 커밋:

1
git commit --date="2025-01-29 10:00:00" -m "메시지"

작성자 변경

다른 작성자로 커밋:

1
git commit --author="Name <email@example.com>" -m "메시지"

해보기: 다양한 커밋 옵션

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 1. 파일 수정
echo "Update" >> README.md

# 2. -am 옵션 (자동 스테이징)
git commit -am "Update README"

# 3. 상태 확인
git status  # clean

# 4. 새 파일 추가
echo "New" > new.txt

# 5. -am은 새 파일 제외
git commit -am "Try to add new file"  # 커밋 안 됨

# 6. 새 파일은 명시적으로 add
git add new.txt
git commit -m "Add new file"

결과: 각 옵션의 동작 방식을 이해합니다


Topic3. 커밋 수정과 관리

이미 만든 커밋을 수정하는 방법입니다.

마지막 커밋 수정

커밋 메시지만 수정:

1
git commit --amend -m "새로운 메시지"

파일 추가하고 커밋 수정:

1
2
3
4
5
# 1. 파일 잊었을 때
git add forgotten-file.txt

# 2. 마지막 커밋에 추가
git commit --amend --no-edit

메시지와 파일 동시 수정:

1
2
git add forgotten-file.txt
git commit --amend -m "새 메시지"

amend 주의사항

1
2
3
4
5
6
7
8
9
⚠️ 주의:
- 이미 push한 커밋은 amend 하지 말 것
- 히스토리가 바뀌므로 협업 시 문제 발생
- 로컬에서만 사용

안전한 경우:
✅ 아직 push 안 한 커밋
✅ 혼자 작업하는 브랜치
✅ 실수를 바로 수정할 때

커밋 정보 확인

상세 정보:

1
2
3
4
5
6
7
8
# 마지막 커밋 상세
git show

# 특정 커밋
git show abc123

# 커밋에서 바뀐 파일
git show --name-only

변경 내용 보기:

1
2
3
4
5
# 마지막 커밋 diff
git show HEAD

# 2개 전 커밋
git show HEAD~2

실전 워크플로우

시나리오 1: 커밋 메시지 오타

1
2
3
4
5
# 1. 커밋
git commit -m "Add logni feature"  # 오타!

# 2. 바로 수정
git commit --amend -m "Add login feature"

시나리오 2: 파일 빠뜨림

1
2
3
4
5
6
7
8
9
# 1. 커밋
git add feature.js
git commit -m "Add login feature"

# 2. 파일 빠뜨린 것 발견
git add feature.test.js

# 3. 마지막 커밋에 추가
git commit --amend --no-edit

시나리오 3: 여러 번 수정

1
2
3
4
5
6
7
8
9
10
11
12
# 1. 첫 커밋
git commit -m "WIP: login feature"

# 2. 추가 작업
# ... 코드 수정 ...
git add .
git commit --amend -m "Add complete login feature"

# 3. 또 수정
# ... 버그 수정 ...
git add .
git commit --amend --no-edit  # 메시지 유지

커밋 히스토리 탐색

로그 보기 옵션:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 그래프 보기
git log --graph --oneline --all

# 통계 포함
git log --stat

# 패치(diff) 포함
git log -p

# 최근 3개
git log -3

# 특정 파일 히스토리
git log -- file.txt

# 작성자 필터
git log --author="Name"

# 날짜 필터
git log --since="2025-01-01"
git log --until="2025-01-31"

예쁘게 보기:

1
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

별칭으로 등록:

1
2
3
4
git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

# 사용
git lg

해보기: 커밋 수정 실습

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 1. 커밋
echo "Feature" > feature.js
git add feature.js
git commit -m "Add feature"

# 2. 테스트 파일 빠뜨림 발견
echo "Test" > feature.test.js
git add feature.test.js

# 3. 마지막 커밋에 추가
git commit --amend --no-edit

# 4. 커밋 내용 확인
git show --name-only

# 출력:
# feature.js
# feature.test.js

해보기: 히스토리 탐색

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 1. 여러 커밋 만들기
echo "1" > file1.txt
git add file1.txt
git commit -m "Add file1"

echo "2" > file2.txt
git add file2.txt
git commit -m "Add file2"

echo "3" > file3.txt
git add file3.txt
git commit -m "Add file3"

# 2. 로그 보기
git log --oneline

# 3. 그래프로 보기
git log --graph --oneline

# 4. 통계 보기
git log --stat

# 5. 특정 파일 히스토리
git log -- file1.txt

결과: 커밋을 수정하고 히스토리를 효과적으로 탐색할 수 있습니다


정리

완료 체크:

  • git commit으로 변경사항을 저장할 수 있다
  • 다양한 커밋 옵션을 상황에 맞게 사용할 수 있다
  • 커밋을 수정하고 히스토리를 탐색할 수 있다

핵심 명령어:

1
2
3
4
5
6
git commit -m "메시지"          # 기본 커밋
git commit -am "메시지"         # add + commit
git commit --amend              # 마지막 커밋 수정
git log                         # 히스토리 보기
git log --oneline               # 간단히 보기
git show                        # 커밋 상세 보기

커밋 원칙:

1
2
3
4
5
1. 의미있는 단위로 커밋
2. 명확한 커밋 메시지
3. 관련 파일만 포함
4. 작동하는 상태로 커밋
5. push 전에는 amend 가능

다음: Day 30 - 커밋 메시지 작성법

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.