현재 버전과 마지막 버전 사이의 차이점 찾기


670

Git을 사용하면 현재 버전과 마지막 버전의 차이점을 어떻게 찾을 수 있습니까?

git diff last version:HEAD

1
repo의 클라우드 위치에 GitHub를 사용하는 경우 매우 간단합니다. 프로젝트로 이동하여 프로젝트를 표시하는 표에서 "커밋"이라는 제목을 클릭하십시오.
David Lundquist

1
"현재 및 마지막 버전"의 의미는 실제로 질문에서 명확히해야합니다.
faintsignal

답변:


1170

나는 "마지막 버전"의 의미를 실제로 이해하지 못한다.

HEAD ^로 이전 커밋에 액세스 할 수 있으므로 다음과 같은 것을 찾고 있다고 생각합니다.

git diff HEAD^ HEAD

Git 1.8.5부터는 @의 별칭 HEAD이므로 다음을 사용할 수 있습니다.

git diff @~..@

다음도 작동합니다.

git show

head와 commit 사이의 차이점을 알고 싶다면 다음을 사용할 수 있습니다.

git diff commit_id HEAD

그러면 시각적 diff 도구 (구성된 경우)가 시작됩니다.

git difftool HEAD^ HEAD

HEAD와의 비교가 기본값이므로 Orient에서 지적한대로 생략 할 수 있습니다 .

git diff @^
git diff HEAD^
git diff commit_id

경고

  • @ScottF와 @Panzercrisis는 Windows에서 ~문자 대신에 문자를 사용해야 한다는 의견을 설명 합니다 ^.

나는 커밋 된 버전과 버전과 같은 것을 원했다. ... git diff head head-1
Rajeev

7
Git 1.8.5부터는 @의 별칭입니다 HEAD. 그리고 이후 ~^다시 커밋 하나를 갈 때 동일, 내가 찾을 git diff @~..@입력 훨씬 쉽게.
앤드류

80
기본적으로 표시 git show되므로 @Andrew 가 여전히 더 쉽습니다 @~..@.
amalloy

3
git show커밋 메시지를 인쇄하고 적어도 Git 2.5.4 (Apple Git-61)에서 특정 변경 사항의 차이를 출력하지 않으므로 실제로 OP의 질문에 대한 답변이 아닙니다.
user1944491

1
문제는 git show경우이다 HEAD입니다 병합 당신이 병합 변경 자체가 없을 수 있습니다 자체를 저지하기 때문에 당신이 기대하는 것을 얻을 수 없습니다 커밋합니다. git diff HEAD^ HEAD버전 사이의 실제 변경 사항을 보여줍니다
RubenLaguna

158

"현재 버전"이 작업 디렉토리 (커밋되지 않은 수정)이고 "마지막 버전"이 HEAD(현재 분기에 대한 마지막 커밋 된 수정)이라고 가정하면 간단히

git diff HEAD

다음에 대한 크레딧은 사용자에게 전달됩니다 Cerran 됩니다.

-a커밋 할 때 항상 준비 영역을 건너 뛰면 간단히 사용할 수 있습니다.git diff .

요약

  1. git diff 스테이지되지 않은 변경 사항을 표시합니다.
  2. git diff --cached 단계적 변화를 보여줍니다.
  3. git diff HEAD 모든 변경 사항 (단계적 및 비 단계적)을 표시합니다.

출처 : git-diff (1) 매뉴얼 페이지 – Cerran


16
-a커밋 할 때 항상 준비 영역을 건너 뛰면 간단히 사용할 수 있습니다 git diff. <1> git diff은 비 단계적 변경을 보여줍니다 . <2> git diff --cached단계적 변화를 보여줍니다 . <3> git diff HEAD모든 변경 사항을 보여줍니다 (단계적 및 비 단계적). 출처 : git-diff (1) 매뉴얼 페이지
Cerran

1
이것은 질문의 의도에 답변하기 때문에 허용되는 답변이어야합니다.
tgoneil

git에서 "현재 스테이지되지 않은 버전"의 이름은 무엇입니까? 실제로 이름이 있습니까?
Mathieu CAROFF

118

A의 지적 코멘트 에 의해 amalloy , 경우 "현재 마지막 버전"으로 마지막 커밋을 의미하고, 그 전에 커밋, 당신은 사용을 간단하게 할 수

git show

5
이것이 내가 찾던 것입니다. 좋은 대답입니다.
CodeManiak

12
이전 커밋의 git show HEAD~1경우 마지막 커밋과 git show HEAD~2등 을 표시하는 데 사용 합니다 . 를 통해 하나의 파일 만 표시하십시오 git show HEAD~2 my_file.
Florian Brucker

60

마지막 한 커밋과 마지막 커밋의 차이 (있는 경우 현재 상태와 더한 경우) :

git diff HEAD~

또는 심지어 (쉽게 입력)

git diff @~

현재 브랜치 @의 동의어는 어디에 있으며 "나에게 언급 된 개정의 부모를주십시오"를 의미합니다.HEAD~


나는 git diff HEAD^(등가 HEAD~형식이 아닌) 아주 좋아 합니다. 나처럼 "오래된 자식"을 기억하는 것이 좀 더 쉬운
sxc731

3
당근은 일부 터미널에서 문제가됩니다. 좋은 옵션
light24bulbs

1
~@의미를 설명함으로써 답변을 개선 할 수 있습니다 .
Bob Stein

1
마지막 커밋에서 커밋 된 것을 확인하려면이를 사용하지 마십시오 (더티 변경은 차이에 영향을 미치기 때문에). 더 짧은 구문은 실제로 diff HEAD^ HEAD있어야합니다 git diff @^!. 3:41r1^!
Johnny Wong

@JohnnyWong 설명해 주셔서 감사합니다. 독자들을 혼동하지 않기 위해 "현재 상태"를 언급했습니다.
Tomilov Anatoliy

53

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

이전 커밋과 비교

git diff --name-status HEAD~1..HEAD

현재 및 이전 두 커밋과 비교

git diff --name-status HEAD~2..HEAD

16

cached추가했지만 아직 커밋하지 않은 경우 플래그를 사용하십시오 .

git diff --cached --color

1
이것은 내가이 질문을 찾았을 때 내가 찾던 것과 정확히 일치했습니다. 감사!
William Rogers

7

마스터에 있다고 가정하면 빠르고 간단합니다.

    git diff (checkout_id):file.txt file.txt

예:

    git diff asdfioei91819280din198:file.txt file.txt

4

먼저 "git log "를 하여 저장소의 로그를 나열하십시오.

이제 두 커밋과 관련된 두 커밋 ID를 선택하십시오. 차이점을보고 싶습니다 ( -가장 최신의 커밋 및 일부 이전 커밋 (현재 버전 및 일부 이전 버전에 대한 기대) ).

다음을 사용하십시오.

git diff <commit_id1> <commit_id2>

또는

git difftool <commit_id1> <commit_id2>

3

HEAD가 상단 커밋을 가리키면 다음과 같이 할 수 있습니다.

commit1 -> HEAD
commit2 -> HEAD~1
commit3 -> HEAD~2

첫 번째 커밋과 두 번째 커밋 사이의 차이점 :

git diff HEAD~1 HEAD

첫 번째 커밋과 세 번째 커밋 사이의 차이점 :

git diff HEAD~2 HEAD

두 번째와 세 번째 커밋 사이의 차이점 :

git diff HEAD~2 HEAD~1

등등...


2

내가 사용 의 Bitbucket을이클립스 이클립스와 IDE EGit 플러그인을 설치.

SVN 과 같은 모든 버전의 기록에서 파일을 비교합니다 .

메뉴 프로젝트 탐색기 → 파일 → 오른쪽 클릭 → 히스토리에 표시 .

그러면 해당 파일의 모든 변경 내역이 표시됩니다. 이제 Ctrl두 버전 중 하나를 클릭하고 → "서로 비교"를 클릭하십시오 .


2

태그에도 적용됩니다 (모든 변경 사항을 보려면 아래의 'uniq'및 다른 부분을 제거하십시오).

 git diff v1.58 HEAD 

아래는 동일 하며 모 놀리 식 저장소의 마이크로 서비스에 대한 CI ( Continuous Integration )에 유용 할 수 있습니다 .

git diff v1.58 HEAD  --name-only | sort -u | awk 'BEGIN {FS="/"} {print $1}' | uniq
<Folder Name> 

(신용-https: //dzone.com/articles/build-test-and-deploy-apps-independently-from-a-mo )

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