-
[git] 변경점 비교하기 (git diff)git 2023. 4. 21. 12:04
▶[git] 변경점 비교하기 (git diff)
▶설명
git에서 커밋(commit)을 진행하기 전에 반드시 파일의 변경 사항을 확인하고 진행하는걸 추천합니다.
오늘은 변경점을 비교할 수 있는 명령어를 간단히 알아보겠습니다.
극히 일부만 다루는 점 알아주세요.
▶사용법
아래의 내용은 git 에서 제공한 사용법입니다. 이 중에 자주 사용하는 몇 가지만 알아보겠습니다.
usage: git diff [<options>] [<commit>] [--] [<path>...] or: git diff [<options>] --cached [--merge-base] [<commit>] [--] [<path>...] or: git diff [<options>] [--merge-base] <commit> [<commit>...] <commit> [--] [<path>...] or: git diff [<options>] <commit>...<commit> [--] [<path>...] or: git diff [<options>] <blob> <blob> or: git diff [<options>] --no-index [--] <path> <path> common diff options: -z output diff-raw with lines terminated with NUL. -p output patch format. -u synonym for -p. --patch-with-raw output both a patch and the diff-raw format. --stat show diffstat instead of patch. --numstat show numeric diffstat instead of patch. --patch-with-stat output a patch and prepend its diffstat. --name-only show only names of changed files. --name-status show names and status of changed files. --full-index show full object name on index lines. --abbrev=<n> abbreviate object names in diff-tree header and diff-raw. -R swap input file pairs. -B detect complete rewrites. -M detect renames. -C detect copies. --find-copies-harder try unchanged files as candidate for copy detection. -l<n> limit rename attempts up to <n> paths. -O<file> reorder diffs according to the <file>. -S<string> find filepair whose only one side contains the string. --pickaxe-all show all files diff when -S is used and hit is found. -a --text treat all files as text.
아래의 이미지는 해당 글에서 다루는 내용의 요약입니다.
▶작업 폴더와 스테이지 영역 비교
현재 작업 폴더(Working Directory)와 스테이지 영역(Staging Area) 모든 파일을 비교합니다.
모든 파일 비교
git diff
특정 파일 비교
git diff [filename]
예시
예시는 파일을 수정한 것을 전제로 작성하였습니다.
1. git 상태를 확인합니다.
git status
- ①수정된 파일
- ②새로 추가되어 추적되지 않는 파일
2. git diff 명령어로 전체 변경점을 비교해보도록 하겠습니다.
git diff
- ①첫 번째 파일 변경점
- ②두 번째 파일 변경점
- 새로 추가되어 추적되지 않는 파일은 비교점이 없는 것을 알 수 있습니다.
3. 특정 파일의 변경점만 비교해보겠습니다.
git diff [filename]
4. 모든 파일을 스테이지 영역에 추가해보겠습니다.
git add .
5. 다시 전체 파일 변경점을 비교해보겠습니다.
git diff
- 모든 파일이 스테이지 영역에 추가되었으므로 변경점이 없는 것을 알 수 있습니다.
6. 스테이지에 추가된 파일 중 하나를 수정해보겠습니다. 상태를 보면 아래와 같습니다.
git status
7. git diff 명령어로 전체 변경점을 비교해보도록 하겠습니다.
git diff
위와 같이 스테이지 영역에 올라간 파일과 어떻게 다른지 비교할 수 있습니다.
▶스테이지 영역과 저장소 HEAD 비교
명령어.
git diff --staged
--staged 옵션을 사용하면 스테이지 영역과 저장소 HEAD를 비교합니다.
예시
이 예시는 이전 예시에서 이어집니다.
1. git 상태를 확인합니다.
git status
2. 스테이지 추가되어 있는 파일과 저장소를 비교합니다.
git diff --staged
3. 현재 작업 폴더와 스테이지를 비교한 아래와 같습니다.
git diff
작업 영역에서 test가 test2로 수정되었습니다.
▶작업 사항과 HEAD 비교
명령어
git diff HEAD
명령어 HEAD를 추가하면 스테이지와 작업 폴더를 포함하여 HEAD 커밋과 비교합니다.
예시
이 예시는 이전 예시에서 이어집니다. 파일 수정 상황은 이전과 동일합니다.
1. git 상태를 확인합니다.
git status
2. git diff HEAD 명령어를 사용합니다.
git diff HEAD
- 스테이지 : test
- 작업 영역 : test2
스테이지와 작업 폴더를 포함하여 HEAD 커밋과 비교하였기 때문에 작업 영역의 test2로 표시되는 것을 확인할 수 있습니다.
▶파일 변경 줄 수 확인 옵션
명령어
git diff --stat
--stat 을 추가하면 어떤 파일이 몇줄 변경되었는지 개수를 표현해줍니다.
예시
이 예시는 이전 예시에서 이어집니다. 파일 수정 상황은 이전과 동일합니다.
1. git 상태를 확인합니다.
git status
2. 작업 영역과 스테이지 비교
git diff --stat
3. 스테이지와 저장소 HEAD 비교
git diff --staged --stat
4. 작업 사항과 HEAD 비교.
git diff HEAD --stat
▶마치며
이외에도 브랜치끼리 비교, 커밋끼리 비교 등이 가능합니다.
git 을 사용할 때 정말 자주 사용하는 명령어입니다.
도움이 되었으면 좋겠습니다.
'git' 카테고리의 다른 글
[git] 커밋하고 푸시하기 과정 (git commit, push) (0) 2023.04.25 [git] 스테이지에서 제외하기 (git restore --staged) (0) 2023.04.20 [git] 스테이지에 추가하기 (git add) (0) 2023.04.20 [git] 상태 확인하기 (git status) (0) 2023.04.20 [git] 가장 최근의 커밋 취소 (git reset HEAD^) (0) 2023.04.20