커밋하기 전에 git에서 파일 diff를 보는 방법


443

이것은 종종 나에게 일어난다 :

나는 하루나 이틀 동안 동시에 두 가지 관련 변경 사항을 작업하고 있으며 커밋 할 때 특정 파일에서 변경된 내용을 잊어 버립니다. (이것은 개인 git repo이므로 커밋에서 둘 이상의 업데이트가 가능합니다.)

체크인하려는 로컬 파일과 해당 파일의 마지막 커밋 사이의 변경 사항을 미리 볼 수있는 방법이 있습니까?

다음과 같은 것 :

git diff --changed /myfile.txt

그리고 다음과 같이 인쇄됩니다.

line 23
  (last commit): var = 2+2
  (current):     var = myfunction() + 2

line 149
  (last commit): return var
  (current):     return var / 7

이렇게하면 마지막으로 체크인 한 이후 해당 파일에서 수행 한 작업을 빠르게 확인할 수 있습니다.

답변:


732

git add아직 먹지 않은 것을보고 싶다면 :

git diff myfile.txt

또는 이미 추가 된 변경 사항을 보려면

git diff --cached myfile.txt

20
확인하십시오 git add -p. 모든 변경 사항을 검토하고 스테이지 변경 사항을 선택적으로 승인하고 마음이 바뀌면 언제든지 중단하고 청크를 인라인 편집 할 수도 있습니다. 나는 git add그것없이 결코 .
Kyle Baker

2
파일을 어떻게 종료 할 수 있습니까?
킥 Buttowski

3
@Kick 누르기q
wjandrea 15:08에

또한 diff 결과에서 바보 같은 'a /'및 'b /'접두사를 제거하려면을 설정할 수 있습니다 git config --global diff.noprefix true.
Liang

64
git diff HEAD file

마지막 커밋에서 작업 트리에 추가 한 변경 사항이 표시됩니다. 모든 변경 사항 (단계적 또는 단계적 제외)이 표시됩니다.


1
귀하의 솔루션이 작동합니다. 그러나 나는 약간 혼란 스럽다. HEAD는 최신 커밋 번호를 가리 킵니다. 따라서 git add를 실행하면 HEAD가 아닌 작업 디렉토리의 색인이 업데이트됩니다. 차이점을 어떻게 보여줍니까?
Mav55

17

로컬 차이를 확인하려면

git diff myfile.txt

또는 diff 도구를 사용할 수 있습니다 (일부 변경 사항을 되돌리려는 경우).

git difftool myfile.txt

git difftool보다 효율적으로 사용하려면 Meld, DiffMerge 또는 OpenDiff와 같은 즐겨 사용하는 GUI 도구를 설치하고 사용하십시오.

참고 : .파일 이름 대신 (을)를 사용하여 현재 디렉토리 변경 사항을 볼 수도 있습니다 .

각 라인마다 변경 사항을 확인하려면 다음 git blame을 사용하십시오. 커밋에서 커밋 된 라인을 표시합니다.


커밋하기 전에 실제 파일을 보려면 ( master브랜치가 있는 곳 ) 다음을 실행하십시오.

git show master:path/my_file

15

에 대한 -v(또는 --verbose) 옵션을 시도 했습니까 git commit? 메시지 편집기에서 커밋 차이를 추가합니다.


좋은 대답입니다. 이것은 커밋 편집기에서 정보를 제공하여 더 쉽게 커밋 할 수 있습니다. Changes not staged for commit:커밋 편집기를보다 깨끗하게 만들 수 있는 정보 영역을 닫을 수있는 방법이 있습니까?
Radian Jheng

15

파일을 가장 확약적인 마지막 커밋과 비교하려는 경우 고려해야 할 또 다른 기술 :

git diff master myfile.txt

이 기술의 장점은 다음을 사용하여 두 번째 커밋과 비교할 수 있다는 것입니다.

git diff master^ myfile.txt

그리고 그 전에 하나 :

git diff master^^ myfile.txt

또한 마스터 브랜치에 있지 않은 경우 캐럿 '^'문자로 '~'를 대체하고 '마스터'로 'you branch name'을 'you'로 대체 할 수 있습니다.


14

이것이 GUI를 보증하는 완벽한 유스 케이스라고 생각합니다. -나는 그것이 명령 줄 내에서도 충분히 달성 될 수 있음을 완전히 이해하고 있지만.

개인적으로, 모든 커밋은 git-gui에서 수행합니다. 필요한 경우 별도의 덩어리 / 줄로 여러 개의 원자 커밋을 수행 할 수 있습니다.

Gut Gui를 사용하면 형식이 잘 지정된 색상의 인터페이스에서 diff를 볼 수 있으며 다소 가볍습니다. 이것도 체크 아웃해야 할 것 같습니다.


동의합니다-diff를 보면서 커밋 메시지를 편집 할 수도 있습니다.
François

알고 싶지만 CLI를 고수하고 싶습니다. 나는 그것을 가지고있는 몇 가지 패키지를 사용했지만 워크 플로우를 위해 엄격하게 터미널 / vim으로 옮겼습니다. 그래도 고마워.
소스 맥 보스

예, GUI를 고수하면 다음과 같은 멋진 기능이 많이 있습니다. git bisect 실제로 액세스 할 수없는 있습니다.
NoBugs

2
동의합니다-훨씬 빠르고 옵션이 많으며 명령 줄을 사용하는 것이 더 합리적입니다. 그러나 변경 미리보기는 그중 하나가 아닙니다.
VitalyB

터미널에서 실행되는 텍스트 사용자 인터페이스도 있습니다. 체크 아웃 할 가치가있는 것은 tig"Git 용 텍스트 모드 인터페이스"입니다.
smido

10

macOS에서 git root 디렉토리로 이동하여 git diff *


그렇습니다. 방금 테스트했습니다. 자식이 설치되어 있습니까? 오류 메시지가 있습니까? 아마도 이것에 관한 새로운 질문이있을 수 있습니다.
catanore

4

전용 커밋 GUI를 사용하는 것 외에 내가 찾은 가장 좋은 방법은 사용하는 것입니다. git difftool -d그러면 디렉토리 비교 모드에서 diff 도구가 열리고 HEAD를 현재 더티 폴더와 비교합니다.


정확히 내가 필요한 것. 감사합니다
Ivan Ferrer Villa

3
git difftool -d HEAD filename.txt

터미널에서 VI 슬릿 윈도우를 사용한 비교를 보여줍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.