답변:
넌 할 수있어:
git diff master~20:pom.xml pom.xml
... 현재를 비교 pom.xml
에서 하나에 master
최초의 부모를 통해 20 개정 전에. master~20
물론 커밋의 오브젝트 이름 (SHA1sum) 또는 개정을 지정하는 다른 많은 방법으로 바꿀 수 있습니다 .
이것은 실제로 pom.xml
커밋 된 버전이 아닌 작업 트리 의 이전 버전 과 이전 버전을 비교하는 것 입니다 master
. 원하는 경우 대신 다음을 수행 할 수 있습니다.
git diff master~20:pom.xml master:pom.xml
git diff <revision> <path>
예를 들면 다음과 같습니다.
git diff b0d14a4 foobar.txt
단일 파일의 마지막 커밋 간의 차이점을 보려면 다음을 수행하십시오.
git log -p -1 filename
이것은 당신에게 git 파일의 diff를 줄 것이고, 로컬 파일을 비교하지 않습니다.
-1
변경 사항을 얻을 때까지 단계별로 증분 할 수 있습니다 .
gitlog () { git log -${3:-p} -${2:-1} $1; }
처럼 사용 : gitlog Rakefile
나 gitlog Rakefile 5
하고 gitlog Rakefile 10 s
. 첫 번째는 하나의 차이점을 보여줍니다. 두 번째는 다섯 개의 차이점을 보여줍니다. 세 번째는 열을 보여줍니다 --no-patch
.
마지막 커밋에서 파일에서 변경된 내용을 보려면
git diff HEAD~1 path/to/file.
숫자 (~ 1)를 diff하려는 n 번째 커밋으로 변경할 수 있습니다.
일반 구문 :
$git diff oldCommit..newCommit -- **FileName.xml > ~/diff.txt
리포지토리의 "FileName.xml"이라는 이름의 모든 파일
"-"와 "**"사이의 공백에 주목하십시오.
질문에 대한 답변 :
$git checkout master
$git diff oldCommit..HEAD -- **pom.xml
or
$git diff oldCommit..HEAD -- relative/path/to/pom.xml
항상 git과 마찬가지로 tag / sha1 / "HEAD ^"를 사용하여 커밋을 식별 할 수 있습니다.
우분투에서 git 1.9.1로 테스트했습니다.
커밋이 HEAD가 아니면 bash의 중괄호 확장이 특히 유용합니다. 특히 파일 이름이 긴 경우 위의 예는 다음과 같습니다.
git diff master~20:pom.xml master:pom.xml
될 것이다
git diff {master~20,master}:pom.xml
bash로 Brace 확장 에 대해 자세히 알아보십시오 .
git diff master~20 -- pom.xml
마스터 브랜치에도 있지 않은 경우 작동합니다.
GitHub에서 동일한 작업을 수행하려는 사람들 은 시간에 따른 커밋 비교를 참조하십시오 .
예를 들어 숨김 파일로 단일 파일을 비교해야 할 경우
git diff stash@{0} -- path/to/file
특정 커밋에서 diff를 찾고 명령 줄 대신 github UI를 사용하려는 경우 (예 : 다른 사람들과 연결하려는 경우) 다음을 수행 할 수 있습니다.
https://github.com/<org>/<repo>/commit/<commit-sha>/<path-to-file>
예를 들면 다음과 같습니다.
커밋의 모든 파일을 탐색 할 수있는 오른쪽 상단의 이전 및 다음 링크를 참고하십시오.
이것은 임의의 두 버전 사이를 비교하지 않고 특정 커밋에만 작동합니다.
git diff <revision>:foo/ HEAD:foo/
.