etc./StackOverFlow

동일한 분기에 있는 두 개의 다른 커밋 간에 동일한 파일을 어떻게 구별합니까?

청렴결백한 만능 재주꾼 2023. 4. 23. 02:47
반응형

질문자 :systempuntoout


Git에서 동일한 분기(예: 마스터)에 있는 두 개의 다른 커밋(연속되지 않음) 간에 동일한 파일을 어떻게 비교할 수 있습니까?

VSS( Visual SourceSafe ) 또는 TFS( Team Foundation Server )와 같은 비교 기능을 찾고 있습니다.
Git에서 가능한가요?



git-diff 맨페이지에서:

 git diff [--options] <commit> <commit> [--] [<path>...]

예를 들어, "main.c" 파일의 현재 커밋과 두 커밋 간의 차이를 확인하기 위해 다음과 같은 세 가지 명령이 있습니다.

 $ git diff HEAD^^ HEAD main.c $ git diff HEAD^^..HEAD -- main.c $ git diff HEAD~2 HEAD -- main.c

mipadi

다음과 같이 두 개의 다른 버전에서 두 개의 다른 파일을 비교할 수도 있습니다.

git diff < revision_1 >:< file_1 > < revision_2 >:< file_2 >


Jakub Narębski

"difftool"을 구성한 경우 다음을 사용할 수 있습니다.

 git difftool revision_1:file_1 revision_2:file_2

예: 마지막 커밋의 파일을 동일한 분기의 이전 커밋과 비교: 프로젝트 루트 폴더에 있다고 가정합니다.

 $git difftool HEAD:src/main/java/com.xyz.test/MyApp.java HEAD^:src/main/java/com.xyz.test/MyApp.java

~/.gitconfig 또는 project/.git/config 파일에 다음 항목이 있어야 합니다. p4merge 설치 [내가 선호하는 diff 및 병합 도구입니다]

 [merge] tool = p4merge keepBackup = false [diff] tool = p4merge keepBackup = false [difftool "p4merge"] path = C:/Program Files (x86)/Perforce/p4merge.exe [mergetool] keepBackup = false [difftool] keepBackup = false [mergetool "p4merge"] path = C:/Program Files (x86)/Perforce/p4merge.exe cmd = p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"

Anver Sadhat

$ git log 확인하고 두 커밋 의 SHA-1 ID를 복사하고 해당 ID로 git diff 예를 들어:

 $ git diff (sha-id-one) (sha-id-two)

Vibhuti

커밋별로 두 커밋 사이의 파일에 대한 모든 변경 사항을 보려면 다음을 수행할 수도 있습니다.

git log -u $start_commit..$end_commit -- path/to/file


cxreg

다음은 Git 로그 명령에서 찾은 주어진 파일에 대한 Git diff 명령을 출력하는 Perl 스크립트입니다.

 git log pom.xml | perl gldiff.pl 3 pom.xml

수익률:

 git diff 5cc287:pom.xml e8e420:pom.xml git diff 3aa914:pom.xml 7476e1:pom.xml git diff 422bfd:pom.xml f92ad8:pom.xml

그런 다음 쉘 창 세션에서 잘라내어 붙여넣거나 /bin/sh 파이프할 수 있습니다.

노트:

  1. 숫자(이 경우 3)는 인쇄할 줄 수를 지정합니다.
  2. 파일(이 경우 pom.xml)은 두 위치에서 모두 일치해야 합니다(두 위치에서 동일한 파일을 제공하기 위해 쉘 함수로 랩핑할 수 있음). 또는 쉘 스크립트로 바이너리 디렉토리에 넣어야 합니다.

암호:

 # gldiff.pl use strict; my $max = shift; my $file = shift; die "not a number" unless $max =~ m/\d+/; die "not a file" unless -f $file; my $count; my @lines; while (<>) { chomp; next unless s/^commit\s+(.*)//; my $commit = $1; push @lines, sprintf "%s:%s", substr($commit,0,6),$file; if (@lines == 2) { printf "git diff %s %s\n", @lines; @lines = (); } last if ++$count >= $max *2; }

user2520657

@mipadi로 지정된 방법으로 둘 이상의 파일로 diff를 만들고 싶다면:

예를 들어 HEADmaster .coffee 파일을 찾으려면:

 git diff master..HEAD -- `find your_search_folder/ -name '*.coffee'`

이것은 모든 .coffee your_search_folder/ 를 재귀적으로 검색 master 버전 간에 차이를 만듭니다.


Andrei-Niculae Petre

여러 파일이나 디렉터리가 있고 비연속 커밋을 비교하려는 경우 다음을 수행할 수 있습니다.

임시 분기 만들기(이 예에서는 "개정")

 git checkout -b revision

첫 번째 커밋 대상으로 되감기

 git reset --hard <commit_target>

관심있는 커밋에 체리 따기

 git cherry-pick <commit_interested> ...

차이점 적용

 git diff <commit-target>^

완료했을 때

 git branch -D revision

dvdvck

Git의 위대함을 사용하는 또 다른 방법...

 git difftool HEAD HEAD@{N} /PATH/FILE.ext

Edward J Beckett

Visual SourceSafe 또는 TFS(Team Foundation Server) 에서 얻을 수 있는 것과 같이 Windows에서 간단한 시각적 비교를 원하면 다음을 시도하십시오.

  • 파일 탐색기에서 파일을 마우스 오른쪽 버튼으로 클릭
  • 'Git 기록'을 선택하십시오.

참고: Windows 10으로 업그레이드한 후 Git 컨텍스트 메뉴 옵션이 손실되었습니다. 그러나 명령 창에서 'gitk' 또는 'gitk 파일 이름'을 사용하여 동일한 결과를 얻을 수 있습니다.

'Git History'를 호출하면 Git GUI 도구가 시작되고 왼쪽 상단 창에 파일 히스토리가 표시됩니다. 비교하려는 버전 중 하나를 선택하십시오. 그런 다음 두 번째 버전을 마우스 오른쪽 버튼으로 클릭하고 다음 중 하나를 선택합니다.

이것을 구별 -> 선택

또는

Diff selected -> this

색상으로 구분된 차이점이 왼쪽 하단 창에 나타납니다.


Resource

다른 모든 응답은 더 완전하므로 투표하십시오. 이것은 최근 커밋의 ID를 알 수 없다는 것을 기억하기 위한 것입니다. 일반적으로 이전 커밋 uid를 알고 있는 diff 도구를 비교하고 실행하려는 분기에 내 자신을 설정합니다(다른 표기법을 사용할 수 있음).

 git checkout master git difftool 6f8bba my/file/relative/path.py

또한 여기에서 이 다른 응답을 확인하여 파일을 비교하기 위해 git open을 원하는 도구를 설정합니다. .gitconfig를 사용하여 diff 도구 구성 그리고 difftool에 대해 자세히 알아보려면 difftool 문서로 이동하세요.


Raúl Martín

출처 : http:www.stackoverflow.com/questions/3338126/how-do-i-diff-the-same-file-between-two-different-commits-on-the-same-branch

반응형