Git에서 동일한 분기(예: 마스터)에 있는 두 개의 다른 커밋(연속되지 않음) 간에 동일한 파일을 어떻게 비교할 수 있습니까?
VSS( Visual SourceSafe ) 또는 TFS( Team Foundation Server )와 같은 비교 기능을 찾고 있습니다.
Git에서 가능한가요?
질문자 :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
다음과 같이 두 개의 다른 버전에서 두 개의 다른 파일을 비교할 수도 있습니다.
git diff < revision_1 >:< file_1 > < revision_2 >:< file_2 >
"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\"
$ git log
확인하고 두 커밋 의 SHA-1 ID를 복사하고 해당 ID로 git diff
예를 들어:
$ git diff (sha-id-one) (sha-id-two)
커밋별로 두 커밋 사이의 파일에 대한 모든 변경 사항을 보려면 다음을 수행할 수도 있습니다.
git log -u $start_commit..$end_commit -- path/to/file
다음은 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
파이프할 수 있습니다.
노트:
암호:
# 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; }
@mipadi로 지정된 방법으로 둘 이상의 파일로 diff를 만들고 싶다면:
예를 들어 HEAD
와 master
.coffee
파일을 찾으려면:
git diff master..HEAD -- `find your_search_folder/ -name '*.coffee'`
이것은 모든 .coffee
your_search_folder/
를 재귀적으로 검색 master
버전 간에 차이를 만듭니다.
여러 파일이나 디렉터리가 있고 비연속 커밋을 비교하려는 경우 다음을 수행할 수 있습니다.
임시 분기 만들기(이 예에서는 "개정")
git checkout -b revision
첫 번째 커밋 대상으로 되감기
git reset --hard <commit_target>
관심있는 커밋에 체리 따기
git cherry-pick <commit_interested> ...
차이점 적용
git diff <commit-target>^
완료했을 때
git branch -D revision
Git의 위대함을 사용하는 또 다른 방법...
git difftool HEAD HEAD@{N} /PATH/FILE.ext
Visual SourceSafe 또는 TFS(Team Foundation Server) 에서 얻을 수 있는 것과 같이 Windows에서 간단한 시각적 비교를 원하면 다음을 시도하십시오.
참고: Windows 10으로 업그레이드한 후 Git 컨텍스트 메뉴 옵션이 손실되었습니다. 그러나 명령 창에서 'gitk' 또는 'gitk 파일 이름'을 사용하여 동일한 결과를 얻을 수 있습니다.
'Git History'를 호출하면 Git GUI 도구가 시작되고 왼쪽 상단 창에 파일 히스토리가 표시됩니다. 비교하려는 버전 중 하나를 선택하십시오. 그런 다음 두 번째 버전을 마우스 오른쪽 버튼으로 클릭하고 다음 중 하나를 선택합니다.
이것을 구별 -> 선택
또는
Diff selected -> this
색상으로 구분된 차이점이 왼쪽 하단 창에 나타납니다.
다른 모든 응답은 더 완전하므로 투표하십시오. 이것은 최근 커밋의 ID를 알 수 없다는 것을 기억하기 위한 것입니다. 일반적으로 이전 커밋 uid를 알고 있는 diff 도구를 비교하고 실행하려는 분기에 내 자신을 설정합니다(다른 표기법을 사용할 수 있음).
git checkout master git difftool 6f8bba my/file/relative/path.py
또한 여기에서 이 다른 응답을 확인하여 파일을 비교하기 위해 git open을 원하는 도구를 설정합니다. .gitconfig를 사용하여 diff 도구 구성 그리고 difftool에 대해 자세히 알아보려면 difftool 문서로 이동하세요.
출처 : http:www.stackoverflow.com/questions/3338126/how-do-i-diff-the-same-file-between-two-different-commits-on-the-same-branch
JavaScript의 객체 비교 [중복] (1) | 2023.04.24 |
---|---|
HTML에 PDF를 포함하는 권장 방법은 무엇입니까? (0) | 2023.04.23 |
사용자 정의 개체가 있는 NSMutableArray를 어떻게 정렬합니까? (0) | 2023.04.23 |
PostgreSQL: PostgreSQL 사용자 비밀번호를 변경하는 방법은 무엇입니까? (0) | 2023.04.23 |
HTML에서 "역할" 속성의 목적은 무엇입니까? (0) | 2023.04.23 |