본문 바로가기
DevOps/Git

[Git] 변경 이력 관리 : commit, log, diff, show

by okbear3 2025. 4. 17.

Git의 가장 핵심적인 기능은 변경 이력을 체계적으로 기록하고 추적할 수 있다는 점입니다.

이번 글에서는 커밋을 기록하고, 히스토리를 조회, 커밋 간 변경 내용을 비교하는 데 사용되는 핵심 명령어인 commit, log, show, diff의 개념과 사용법을 자세히 살펴보겠습니다.


commit - 변경 이력을 저장소에 기록하기

git commit은 스테이징 영역에 있는 변경사항을 로컬 저장소에 스냅샷으로 저장하는 명령어입니다.

git commit -m "message" 

-m 옵션은 커밋 메시지를 인라인으로 작성하는 방식입니다.

Git에서는 모든 커밋에 의미 있는 메시지를 남기는 것을 권장합니다.

메시지 작성 팁

  • 의미있는 단어로 시작 (feat:, fix:, docs:, refactor: 등)
  • 작업 목적이 명확하도록 작성 (영어/한글 상관 없이 팀 규칙에 따라 일관성 있게 작성)

 

다중 라인으로 메시지를 작성하려면 git commit 으로 에디터를 열고, 제목+설명을 구분하여 메시지를 작성할 수 있습니다.

 

commit --amend - 이전 커밋 수정

git commit --amend는 가장 최근의 커밋을 수정할 때 사용합니다.
커밋 메시지를 바꾸거나, 누락된 파일을 추가하거나, 잘못 포함된 파일을 제외하는 등의 작업이 가능합니다.
커밋을 덮어쓰기 때문에 커밋 해시가 변경되며, 공유되지 않은 로컬 커밋에서만 사용하는 것이 좋습니다.

#에디터를 열어 커밋 메시지를 수정합니다.
git commit --amend

#기존 커밋 메시지를 그대로 사용합니다.
git add .
git commit --amend --no-edit

 

commit --amend를 사용하면 기존의 커밋 내역에 현재 스테이징 된 내용을 포함시킨 후 덮어씌우게 됩니다.

이미 원격 저장소에 푸시한 커밋을 수정하면 강제 푸시(git push --force)가 필요하므로, 협업 브랜치에서는 사용에 주의해야 합니다.

 

log - 커밋 이력 확인

git log는 지금까지 수행한 커밋의 히스토리를 보여줍니다.

언제, 누가, 어떤 메시지로 커밋했는지 확인할 수 있습니다.

#간결한 로그 출력
git log --oneline

#브랜치 구조와 함께 커밋 이력 한눈에 보기
git log --oneline --graph --decorate --all
옵션 설명
--graph 브랜치 및 병합 구조를 시각적으로 표현
--decorate HEAD, 브랜치 명 등을 표시
--all 로컬 저장소의 모든 브랜치 로그 표시
-p 커밋별 diff 보기
--stat 변경 파일 및 변경 라인 요약
--author=”이름” 특정 작성자의 커밋만 표시
--since=”2 days ago” 특정 날짜 이후의 커밋만 표시

 

show - 특정 커밋 상세 보기

git show는 특정 커밋의 상세 정보를 보여줍니다.

커밋메시지, 변경 파일, diff가지 한 번에 확인 가능합니다.

git show <커밋 해시>

→ 해당 커밋에 포함된 변경 사항과 메타 정보(author, date 등)를 한 번에 확인할 수 있습니다.

 

최근 커밋을 바로 확인하기 위해 아래와 같이 사용할 수 있습니다.

git show HEAD

#두 단계 이전 커밋
git show HEAD~2
옵션 설명
--name-only 어떤 파일이 변경되었는지만 표시
--stat 변경된 파일과 라인 통계 표시
--pretty=online 한 줄 요약
--quiet diff 없이 정보만 출력

 

diff - 변경 내용 비교

git diff는 변경된 파일 내용의 차이(diff)를 보여줍니다. 커밋 전, 혹은 브랜치 간의 차이를 파악할 때 매우 유용합니다.

git diff는 Working Directory와 Staging Area 사이의 차이를 보여주기 때문에, 변경사항이 git add 를 통해 Staging Area로 넘어간 경우 git diff 에서는 아무것도 나타나지 않습니다.

#워킹 디렉터리 vs 스테이징 영역
git diff 

#스테이징 영역 vs 최근 커밋
git diff --cached
git diff --staged

#브랜치 간 코드 차이 비교
git diff dev master

#특정 커밋 간 비교
git diff abc1234 dfg5678

#최신 커밋과의 변경사항 확인하기
git diff HEAD 
옵션 설명
--name-only 변경된 파일 이름만 표시
--stat 변경 파일과 라인 시각적 요약
--cached / --staged 스테이징에 올린 변경 확인

 


Git에서 commit은 단순한 저장이 아니라 하나의 작업 단위를 기록하는 중요한 과정입니다.
이렇게 기록된 커밋들은 log로 확인하고, diff로 비교하고, show로 상세 내용을 살펴보며 지속적으로 관리되고 추적 가능한 이력으로 남습니다.

이 네 가지 명령어를 익히면, Git을 단순한 백업 도구가 아닌 협업과 품질 관리를 위한 강력한 버전 관리 시스템으로 활용할 수 있게 됩니다.