Git 커밋의 변경 사항을 보는 방법은 무엇입니까?


답변:


1972

특정 COMMIT해시에 대한 차이점을 보려면

git diff COMMIT~ COMMITCOMMIT조상과의 차이점을 보여줄 것 COMMIT입니다. 표기법과 그 친구에 대한 명령 및 gitrevisions 에 대한 자세한 내용은 git diff 매뉴얼 페이지를 참조하십시오 . ~

또는 git show COMMIT매우 비슷한 것을 수행합니다. (확산을 포함하지만 커밋에 대한 커밋을 포함하지 않는 커밋의 데이터) git show 맨 페이지를 참조하십시오 .


17
주의 ^필요가 톰슨과 Bourne의 쉘에서 인용 (동의어에 대한 될 수 |있다)와 rc및 그 유도체 (캐럿 연산자)과의 zshextendedglob와 함께 (사용 not로빙 운영자)
스테판 Chazelas가

3
HEAD^커밋에 여러 부모가있는 경우 (즉, 병합 커밋) 첫 번째 부모 를 의미합니다.
Mansour

23
git diff COMMIT~ COMMIT나를 위해 일하고, 캐럿 대신 물결표를 주목하십시오. 나는 윈도우 10에서 자식 버전 2.6.1.windows.1를 실행 해요
Juuso Ohtonen

14
@tradetree : COMMIT라는 단어는 SHA 커밋과 같은 커밋 이름으로 대체됩니다.
Nick Matteo

91
git show 가이 질문에 더 적합하다고 생각하며 먼저 언급해야합니다.
pypmannetjies

496

" 부모와 git commit의 차이점에 대한 속기? " 에서 언급했듯이 다음 과 함께 사용할 수도 있습니다 git diff.

git diff COMMIT^!

또는

git diff-tree -p COMMIT

git show를 사용하면 diff에만 집중하기 위해 다음을 수행해야합니다.

git show --color --pretty=format:%b $COMMIT

COMMIT매개 변수는있다 커밋 틱 :

A는 객체 커밋 또는 개체를 재귀 적으로 역 참조 할 수있는 개체를 커밋합니다. 커밋 객체, 커밋 객체 를 가리키는 태그 객체, 커밋 객체 를 가리키는 태그 객체 등의 커밋은 모두 다음과 같습니다 .

참조 "개정 이력을 지정"gitrevision을 커밋 틱를 참조.
" Git에서 나무의 의미는 무엇입니까? " 도 참조하십시오 .


369

이 쉬운 방법으로 시도 할 수도 있습니다.

git show <COMMIT>

2
이것은 상당히 다른 것 같습니다
Miserable Variable

3
커밋 메시지 만 표시합니다. 이 커밋에 적용된 코드 변경 내용이 다릅니다.
k0pernikus

1
그래? 최근 git 버전에서 마침내 ...
Davy

2
이 답변은 업데이트 된 정답이어야합니다.
Scott Skiles

1
이것이 답이되어야합니다.
Roel

77

git show 가장 최근의 커밋에서 변경된 사항을 보여줍니다.

에 해당합니다 git show HEAD.

git show HEAD~1 커밋 1 개를 되돌립니다.


45

나는 보통 :

git diff HEAD~1

마지막 커밋과 관련된 변경 사항을 표시합니다. 더 많은 커밋이있는 경우 숫자 1을보고 싶은 커밋 수만큼 늘리십시오.


34

먼저 다음을 사용하여 커밋 ID를 얻습니다.

git log #to list all

또는

git log -p -1 #last one commit id

커밋 ID를 복사하십시오.

이제 두 가지 방법을 사용하여 특정 커밋의 변경 사항을 나열합니다.

방법 1 :

git diff commit_id^! #commit id something like this 1c6a6000asad012

방법 2 :

git show commit_id
For example: git show 1c6a600a

2
무슨 ^!뜻입니까 ??
Martín Coll

2
^! commit ^ .. commit의 약자입니다. 이는 모든 부모를 제외하고 해당 커밋에서 diff를 확인하는 것을 의미합니다.
Mohideen bin Mohammed

나는 전문가는 아니지만 git log c ^! git log c ^ .. c와 정확히 동일하지 않습니다. 사실 그것은 훨씬 낫습니다 : git log c ^ .. c는 너무 많은 항목을 나열했지만 git log c ^! 옳은 일을했기 때문에 이것이 내가 오랫동안 찾고 있었던 것입니다
user829755

32
git show <commit_sha>

커밋에 무엇이 있는지 보여줍니다. 두 커밋 샤 사이에 공백을두면 범위를 조정할 수 있다고 생각합니다.

git show <beginning_sha> <ending_sha>

기능 로그가 모두 한 줄에 있기 때문에 자주 재베이스 작업을하는 경우 매우 유용합니다.


25

git-diff (1) 매뉴얼 페이지에서 :

git diff [options] [<commit>] [--] [<path>…]
git diff [options] --cached [<commit>] [--] [<path>…]
git diff [options] <commit> <commit> [--] [<path>…]
git diff [options] <blob> <blob>
git diff [options] [--no-index] [--] <path> <path>

가운데 세 번째를 사용하십시오.

git diff [options] <parent-commit> <commit>

또한 예제 섹션 의 맨 아래에있는 동일한 매뉴얼 페이지에서 :

$ git diff HEAD^ HEAD      <3>

마지막 커밋과 마지막 커밋 이전의 버전을 비교하십시오.

분명히 그것은 약간 혼란스럽게 표현됩니다.

가장 최근의 커밋과 커밋을 비교하십시오.


3
리워드가에 적용됩니다 git diff HEAD HEAD^.
Richard

git diff HEAD ^ HEAD는 변경 사항을 표시하지 않습니다.
user3690202

@ user3690202이므로 표시 할 변경 사항이 없음을 의미합니다. 실제로 그런가요?

표시 할 변경 사항이없는 방법은 무엇입니까? 마지막 커밋을 보려면 완전히 새로운 저장소가 아닌 한 변경 사항이 표시됩니까?
user3690202 2016 년

@ user3690202 커맨드 라인 옵션으로 덮어 쓸 수 있지만이를 확인하고 막는 내장 된 보호 장치가 있지만 실제로 부모의 변경 사항을 포함하지 않는 Git으로 "빈 커밋"을 수행 할 수 있습니다. 의도적으로 빈 커밋을 만들지 의심 스럽습니다. 따라서 Git이 실제로 변경 사항이 없다고 생각하도록 속이는 선 종료 변환 (또는 다른 재미있는 공백 항목)을 어떻게 든 커밋 할 수도 있습니다. 어떤 플랫폼에서 Git을 실행하고 있습니까?


16

또 다른 가능성 :

git log -p COMMIT -1

1
@GrantMcLean 예, 이미 최고 답을 얻었으므로 언급하지 않았습니다.
John_West

11

git diff HEAD HEAD^1부모 커밋으로 diff를 보는 데 사용할 수 있습니다 .

파일 목록 만 보려면 --stat옵션을 추가하십시오 .


이것은 당신이, 자식은 diff HEAD ^ 1 개 HEAD를 의미하는 것입니다
Shibir BASAK

역 비교를 수행하기 때문에 추가 한 항목이 제거 된 것으로 표시됩니다. diff명령을 읽는 방법 은 다음과 같습니다. 커밋에서 커밋 HEAD으로 가져 오기 위해 파일에서 무엇을 변경해야 HEAD^1합니까?
brainplot

9
git difftool COMMIT^ <commit hash>

difftool을 구성한 경우에도 가능합니다.

difftool구성 하는 방법을 참조하십시오 또는 여기에 매뉴얼 페이지

또한 git diff-tree --no-commit-id --name-only -r <commit hash>commit commit 해시에서 어떤 파일이 변경 / 커밋되었는지 확인할 수 있습니다.


9

특정 커밋과 마지막 커밋을 비교하기 위해 아래 명령을 좋아합니다.

git diff <commit-hash>^-

예:

git diff cd1b3f485^-

6

커밋 사용으로 작성자와 시간을 보려면 git show COMMIT. 다음과 같은 결과가 발생합니다.

commit 13414df70354678b1b9304ebe4b6d204810f867e
Merge: a2a2894 3a1ba8f
Author: You <you@you.com>
Date:   Fri Jul 24 17:46:42 2015 -0700

     Merge remote-tracking branch 'origin/your-feature'

어떤 파일이 변경되었는지 확인하려면 위의 병합 행 값을 사용하여 다음을 실행하십시오 git diff --stat a2a2894 3a1ba8f.

실제 diff를 보려면 다음을 실행하십시오. git --stat a2a2894 3a1ba8f


"실제 diff를 보려면 git --stat a2a2894 3a1ba8f"을 실행하십시오 . 나는 당신이 git diff a2a2894 3a1ba8f다른 것을 의미한다고 생각합니다 unknown option: --stat.
과일

5

전체 변경 사항을 확인하려면 다음을 수행하십시오.

  git diff <commit_Id_1> <commit_Id_2>

변경 / 추가 / 삭제 된 파일 만 확인하려면 :

  git diff <commit_Id_1> <commit_Id_2> --name-only

참고 : 사이에 커밋없이 diff를 확인하기 위해 커밋 ID를 넣을 필요는 없습니다.


4

Windows 10에서 Git 버전 2.6.1.windows.1을 실행하고 있으므로 Nevik의 답변을 약간 수정해야했습니다 (캐럿 대신 물결표).

git diff COMMIT~ COMMIT

또 다른 옵션은 캐럿을 인용하는 것입니다.

git diff "COMMIT^" COMMIT

3

이 명령은 Git 부모 commit-hash를 얻는다 :

git log -n 2 <commit-hash>

그 후 git diff-tool <commit-hash> <parent-commit-hash>

예:

bonnie@bonnie ~/ $ git log -n 2 7f65b9a9d3820525766fcba285b3c678e889fe3

commit 7f65b9a9d3820525766fcba285b3c678e889fe3b
Author: souparno <souparno.majumder@gmail.com>
Date:   Mon Jul 25 13:17:07 2016 +0530

CSS changed to maintain the aspect ratio of the channel logos and to fit them properly.

commit c3a61f17e14e2b80cf64b172a45f1b4826ee291f
Author: souparno <souparno.majumder@gmail.com>
Date:   Mon Jul 25 11:28:09 2016 +0530

The ratio of the height to width of the channel images are maintained.

금후

git difftool 7f65b9a9d3820525766fcba285b3c678e889fe3b c3a61f17e14e2b80cf64b172a45f1b4826ee291f

2

최신 커밋의 변경 사항을보고 싶다면 간단히 git show알려주십시오.


1

그래픽보기에서 소스 변경 사항을 확인하는 경우

$gitk (Mention your commit id here)

예를 들면 다음과 같습니다.

$gitk HEAD~1 

이 답변이 왜 다운되었는지 이해가되지 않습니다. 나는 커맨드 라인과 텍스트 기반의 것들이 갈 길이지만 gitk는 많은 유용한 정보를 제공한다는 데 동의합니다.
ShellFish
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.