다른 지점의 커밋 된 복사본으로 파일의 현재 작업 복사본을 비교


158

foo마스터 브랜치에 파일이있는 저장소가 있습니다 . 바 지점으로 전환하고로 변경했습니다 foo. git diff이 복사본 (아직 커밋되지 않은)과 마스터 브랜치 복사본 사이를 어떻게 실행할 수 있습니까?

답변:


151

다음은 나를 위해 작동합니다.

git diff master:foo foo

과거에는 다음과 같을 수 있습니다.

git diff foo master:foo


9
에 관한 귀하의 답변을 볼 때마다 git diff항상 stackoverflow.com/questions/5256249/git-diff-doesnt-show-enough/…를
VonC

@VonC : 고마워, 그 가치가 있음을 아는 것이 좋습니다 :) 우연히, 내 대답을 업데이트 한 기이함을 이해합니까?
Mark Longair

2
--매개 변수를 경로 인수와 구분하기 위해을 사용해 보셨습니까 ? git diff -- master:foo foo
VonC

1
1.8에서는 git diff -- master:foo foo작동하지 않습니다. arg master:foo는 지점에있는 파일 대신 존재하지 않는 파일 이름으로 간주 하고 무시합니다. 마지막 2 개 args를 전환 해보십시오. 만약 작동한다면 diff 비교는 반대로되지만 출력은 바뀌지 않습니다.
켈빈

9
나에게 그것은 git diff master:foo foo반대입니다. 나는 할 수 있지만 그 반대는 아닙니다. 나는 그것을 이해하지 못한다. git 1.7.9.5 / Ubuntu 12.04를 사용하면 적어도 git diff -R master:foo foo실제로 원하는 diff를 얻을 수 있습니다 . msysgit 1.9.4 / Windows 7 x64로 시도하면 얻을 수 fatal: unable to read 0000000000000000000000000000000000000000있습니다. -R내가 없으면 git 1.7.9.5와 동일한 오류 메시지가 표시되지만 1.9.4에서는 fatal: master:foo: no such path in the working tree.
JMM

100

작업 트리를 특정 분기 이름과 비교하려고하므로 다음을 원합니다.

git diff master -- foo

이 형식의 git-diff에서 온 것입니다 (git-diff 맨 페이지 참조)

   git diff [--options] <commit> [--] [<path>...]
       This form is to view the changes you have in your working tree
       relative to the named <commit>. You can use HEAD to compare it with
       the latest commit, or a branch name to compare with the tip of a
       different branch.

참고로, 작업 트리의 모든 것이 아니라 스테이지 한 내용의 차이를 볼 수 있는 --cached(일명 --staged) 옵션 도 있습니다 .

   git diff [--options] --cached [<commit>] [--] [<path>...]
       This form is to view the changes you staged for the next commit
       relative to the named <commit>.
       ...
       --staged is a synonym of --cached.

2
감사. 왜 그런지 모르겠지만이 답변 만 Linux의 git 1.8.1에서 효과적이었습니다.
srking

훌륭 해요, 고맙습니다. diff 명령에 현재 지점의 이름을 포함시키고 싶었지만 필요하지 않습니다.
yoyo

이것은 몇 달 전에 저에게 효과가 있었지만 지금은 아닙니다. 현재 git 버전 2.7.4 (Apple Git-66)에 있습니다. 나는 내가 무엇을 가지고 있었는지 모른다.
hBrent

@ hBrent 이것은 git 2.7.3이있는 OSX 10.11에서 여전히 작동합니다. 도움이되는 경우 지침이 포함 된 간단한 샘플 리포지토리
Jordan Brough

감사합니다 @JordanBrough.
hBrent

14

또한: git diff master..feature foo

git diff foo master:foo나를 위해 디렉토리에서 작동하지 않기 때문에 .


나도 마찬가지야 Windows인가?
Scott Stafford

@ScottStafford 나는 우분투에있어, 아니, 그것은 단지 Windows 일 것 같지 않습니다.
ArtBIT

분기 이름 (창)을 명시 적으로 지정하는 한 저에게 git diff branch1:foo master:foo
효과적입니다.

12
git difftool tag/branch filename

이것은 파일의 로컬 작업 복사본과 원격 저장소의 파일 버전 ( "원본"아님)을 비교하는 데 도움이 된 유일한 답변입니다. 감사합니다, 아디 르와 바즈
마우스 1

git difftool-vdocs git-scm.com/docs/git-difftool 에 따라 옵션 이 없습니다 . 당신은 의미 했습니까 -y?
ks1322

10
git diff mybranch master -- file

작동해야합니다


4
이것은 현재 작업중인 파일 사본이 아닌 mybranch에 커밋 된 파일에 대해서만 작동합니다.
yoyo

"-"는 무슨 뜻
인가요

이 두 방향으로 비교할 수있게 git diff deployment master -- file하고 git diff master deployment -- file예상대로 일을하다 어떤 두 가지로 .
viktorkho

0

현재 지점과 비교하여 로컬 변경 사항을 보려면

git diff .

기존의 다른 지점과 비교하여 로컬 변경 사항을 보려면

git diff <branch-name> .

특정 파일의 변경 사항을 보려면

git diff <branch-name> -- <file-path>

git fetch처음에 달려야 합니다.

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