IT/기초 지식

[git] 잘 잊어버리는 사람을 위한 git diff 치트 시트

개발자 두더지 2020. 10. 7. 15:35
728x90

 git diff는 여러 방면에 정말 자주 쓰이는 것 만큼 할 수 있는 것이 많다보니 쉽게 잊어 버려 매번 검색하곤 했다. 따라서 자주 쓰이는 용법을 한 번 정리해 보았다.

 

git pull 하기 전에 리모트와의 변경점 확인하기


git diff HEAD.. 리모트명/브랜치명

 git pull하기 전에 로컬의 최신 커밋과 pull할 곳의 리모트 리포지토리와의 변경점을 보고 싶을 때는 이 커맨드로 확인할 수 있다. 여기서의 리모트 명은 origin과 같은 것을 의미한다.

 

git push 하기 전에 리모트와의 변경점 확인하기


위의 커맨드와 반대로 아래와 같이도 작성할 수 있다.

git diff 리모트명/브랜치명..HEAD

..의 오른쪽이 시계열적으로 최신으로 간주되므로, 이 경우는 git commit 한 후에 리모트 리포지토리와 그로부터 push하고 싶은 곳을 표시하고 싶은 경우 사용한다. 

 

git add하기 전에 변경점 확인하기


git diff

git add하기 전에 변경한 곳과 인덱스와의 변경점을 보고 싶을 때에 이 커맨드를 사용한다.

 

git add한 후에 변경점 확인하기


git diff --cached

git add한 후에 인덱스와 가장 최근의 커밋와의 변경점을 보고 싶을 때는 --cached를 붙인다.

--staged도 같은 의미로 직감적으로 쉽게 알 수 있는 명명이기 때문에 이것을 사용하는 쪽이 더 알기 쉬울지도 모른다.

 

이번에 커밋한 변경점 확인


git diff HEAD^

 git commit 한 후에 커밋한 곳을 표시하고 싶은 경우 이 커맨드로 볼 수 있다. '가장 최근의 커밋'과 '한 단계 전의 커밋'과의 차이의 정도 라고 한다(일본에서는 差分이라고 표현하는 것 같다) .

 본래 git diff HEAD^..HEAD 라고 작성하는 것이 올바르지만, ..의 오른쪽을 생략하면 암시적으로 현재의 브랜치의 HEAD를 지정하는 것이 되므로 이와 같은 작성법도 문제가 없다.

 cherry-pick했을 때에 어떤 파일이 변경되었는가를 조사하고 싶을 때도 이 커맨드로 확인할 수 있다.

 

커밋끼리 비교하기


git diff 변경전의SHA..변경후의SHA

SHA만 알면, 그 커밋 끼리의 변경점도 확인할 수 있다. SHA란 GitHub의 커밋 목록에 표시되어 있는 아래의 빨간 네모 박스이다.

 

어떤 커밋의 변경점 확인하기


git diff 확인하고싶은커밋의SHA^..확인하고싶은커밋의SHA

확인하고 싶은 커밋의 SHA만 알면 "^"를 사용하여 그 커밋으로 변경된 파일도 확인할 수 있다.

 

브랜치끼리 비교하기


git diff 브랜치A..브랜치B

Pull Request를 보내기 전에 자신이 만든 브랜치와 마스터와의 변경점을 확인하는 등에 사용된다.

 

어떤 1개의 파일의 변경점 확인하기


git diff --대상파일경로

 git add하기 전에 변경된 어떠한 파일에 대해 변경점을 확인하고 싶을 때 사용한다. "경로"이기 때문에 당연히 디렉토리 단위에 비교할 수도 있다. 

 참고로 git이 인수를 파일로 인지한 경우에는 --를 생략할 수 있다. 특정 파일을 다른 브랜치와 비교하고 싶은 경우에는 아래와 같이 작성할 수 있다.

git diff 브랜치A..브랜치B --대상파일경로

 

다른 파일 끼리 비교하기


git diff -- 파일경로A 파일경로B

--의 뒤는 항상 경로로 인식된다. 그러므로 2개를 나란히 작성하면 경로 끼리 비교하는 것이 가능하다.

 

어느정도 변경되었는지만 확인하기


git diff --stat

 변경점을 모두 표시하는 것이 아닌, 파일마다 얼마나 변경되었는가를 표시하고 싶은 경우에 이 옵션을 사용한다. 이 옵션을 사용하면 아래와 같이 화면에 표시된다.

  변경한 파일이 많아 이상한 파일이 포함되어 있는지를 한 번에 확인하고 싶을 때 유용하다.

 

파일명만 확인하기


git diff --name--only

변경점을 표시할 때에, 변경된 파일의 경로만을 표시해준다.

(이미지 추후 첨부)

이 자체로 사용하는 것보다 cp등 외부 커맨드와 같이 사용해 변경 파일에 대해 일괄 처리하는 경우가 많다.

git add -n .; git diff --name-only

 위와 같이 작성하면, 일단 git add의 dry-run한 다음 추가된 파일명도 포함해준다. git status와 다르게 파일 명만 출력 되므로 다양한 응용이 가능한 커맨드이다.

 

개행 코드나 공백을 무시하기


git diff -w

 개행 코드의 차이점이나 문장의 서두나 끝의 공백을 무시하고 싶은 경우에 -w를 붙인다. -b도 있지만, -w만 기억해두어도 큰 문제는 없다.

 

개행 무시하기


git diff --ignore-blank-lines

--ignore-blank-lines 옵션을 붙이면 개행이 증가하여도 무시해준다.

 

변경점의 전후에 표시되는 행 수 변경하기


git diff -U0

이렇게 작성하면 전후의 행수에 삭제된다. 반대로 -U10 등을 하면 전후에 10행이 표시된다.

 

단어 단위로 비교하기


git diff --color-words

메소드명을 변경했을 때 등, 행 단위가 아닌 단어 단위로 비교하고 싶은 경우 --color-words 옵션을 붙이면 확인하기 쉬워진다. 

.gitattributes와 함께 사용하면 단어 단위로 비교해주고 보다 더 알기 쉽게 보여주기 때문에 추천한다.


참고자료

qiita.com/shibukk/items/8c9362a5bd399b9c56be

728x90