커밋하기 전에 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.