카테고리 없음

[git] 변경점 비교하기 (git diff)

광82 2023. 7. 13. 13:50
반응형

▶설명


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

 

반응형