두 개의 다른 파일 간의 git diff


111

에서 HEAD(최신 커밋), I라는 이름의 파일이 있습니다 foo. 현재 작업중인 트리에서로 이름을 바꾸고 bar편집했습니다.

내가 원하는 git diff fooHEAD, 그리고 bar내 현재 작업 트리입니다.


64
나는이 질문 (제목에서)이 반드시 저장소에 있지 않은 두 파일에 git diff를 사용하는 것에 관한 것이라고 생각했습니다. --no-index 플래그가이를위한 것임을 git diff --no-index --word-diff old_file.txt new_file.txt알았습니다. 예를 들어 (--word-diff는 줄뿐 아니라 단어별로 변경 사항을 강조 표시하므로 긴 텍스트에 매우 유용합니다).
Pat

답변:


135

경로를 명시 적으로 지정하십시오.

git diff HEAD:full/path/to/foo full/path/to/bar

문서--find-renames옵션을 확인하십시오 .git-diff

크레딧 : twaggs .


9
git diff <path> <path>git 저장소에 있지 않더라도 사용하여 두 파일을 비교할 수 있음을 언급하고 싶습니다 .
mitenka

1
@mitenka 나는 그것이 옳지 않다고 생각합니다. 당신이 보면 git diff --help두 개의 파일을 지원하는 유일한 패턴이 있음을 볼 수 있습니다 git diff [<options>] --no-index [--] <path> <path>. git diff a b파일이 아닌 커밋 패턴 만 일치합니다.
Doug

@Doug 여기에 당신이 언급 한 help 명령의 인용문이 있습니다. git-scm.com/docs/git-diff : 디스크에있는 두 파일 사이의 [...] 변경 사항을 보여줍니다.
mitenka

@mitenka 도움말에 따르면 '--no-index'를 사용하지 않는 한 파일을 비교하지 않습니다. 귀하의 의견은 별도의 답변이어야합니다. 사실이 아니며이 답변과 관련이 없습니다.
Doug

1
@Doug 귀하의 의견에 감사드립니다. 다음은 도움말에서 인용 --no-index한 내용입니다. Git에서 제어하는 ​​작업 트리에서 명령을 실행하고 작업 트리 외부에있는 경로 중 하나 이상을 가리 키거나 Git에서 제어하는 ​​작업 트리 외부에서 명령을 실행할 때 옵션을 생략 할 수 있습니다. .
mitenka

78

나는 사용 --no-index이 당신이 찾고있는 것이라고 믿습니다 .

git diff [<options>] --no-index [--] <path> <path>

git 매뉴얼에서 언급했듯이 :

이 형식은 파일 시스템에서 주어진 두 경로를 비교하는 것입니다. 당신은 할 수 생략--no-index 힘내에 의해 제어되는 작업 트리에서 명령을 실행할 때 옵션을 적어도 외부 경로의 포인트 중 하나 작업 트리, 또는 외부 명령 실행 힘내에 의해 제어되는 작업 트리를.


1
@swe 이것은 확실히 유용한 대답이지만 OP는 구체적으로 파일이 HEAD에 있으며 이는 git 인덱스에 있음을 의미합니다. 수락 된 답변은 질문에 직접적으로 대응합니다. 또한 수락 된 답변은 6 년 앞선 시작이었습니다.)
Michael Delgado

3
이것은 OP에 도움이되지 않았을 수도 있지만 정확히 내가 찾던 것입니다.
thislooksfun

이것은 웹에서 이것에 대해 더킹한다면 제목에 의해 게시 된 질문에 대한 대답입니다.
Merlin

3

tortoise git을 사용하는 경우 파일을 마우스 오른쪽 버튼으로 클릭하고 다음과 같이 git a diff를 수행 할 수 있습니다. 첫 번째 파일을 마우스 오른쪽 버튼으로 클릭하고 tortoisegit 하위 메뉴를 통해 "Diff later"를 선택한 다음 두 번째 파일에서 마우스 오른쪽 버튼을 클릭 할 수도 있습니다. , tortoisegit 하위 메뉴로 이동 한 다음 "Diff with yourfilenamehere.txt"를 선택하십시오.


-12

PhpStorm을 사용하여 이전 커밋 코드를 복사하고 내장 된 "클립 보드와 비교"도구를 사용하여 현재 버전과 비교합니다.


5
PhpStorm은 상용 IDE입니다. 이 질문은 추가 소프트웨어를 가정하지 않고 git cli 자체 내에서이를 수행하는 방법에 관한 것입니다.
Charles Taylor
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.