같은 브랜치상의 2개의 다른 커밋 간에 같은 파일을 어떻게 구별합니까?
Git에서는, 같은 브랜치(예를 들면 마스터)에 있는 2개의 다른 커밋(연속하지 않음)간에 같은 파일을 어떻게 비교할 수 있습니까?
VSS(Visual Source Safe) 또는 TFS(Team Foundation Server)와 같은 비교 기능을 찾고 있습니다.
Git으로 가능한가요?
manpage부터:
git diff [--options] <commit> <commit> [--] [<path>...]
예를 들어, 파일 "main.c"가 now와 2개의 커밋백의 차이를 확인하려면 , 다음의 3개의 명령어를 사용합니다.
$ 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를 설치합니다.
[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\"
주의: Intelij Enterprise 또는 Community Edition을 사용하는 경우 - Marge/Rebase를 수행할 때 3방향 Marge를 수행하기 위한 좋은 도구가 있습니다.
간단한 차이는 오른쪽 클릭-> Git-> 리비전과 비교할 수 있습니다.
관심 있는 리비전을 선택합니다.
인텔리가 차이를 보여줄 것이다.
확인.$ git log2개의 다른 커밋의 SHA-1 ID를 복사하여git diff명령어를 입력합니다.예:
$ git diff (sha-id-one) (sha-id-two)
커밋 바이 커밋으로 2개의 커밋 사이에 파일의 모든 변경을 표시하는 경우는, 다음과 같이 할 수도 있습니다.
git log -u $start_commit..$end_commit -- path/to/file
이것은 Git log 명령에서 찾을 수 있는 특정 파일에 대한 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.
주의:
- 숫자(이 경우 3)는 인쇄할 행 수를 지정합니다.
- 파일(이 경우 http.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;
}
파일 또는 디렉토리가 여러 개 있고 연속되지 않은 커밋을 비교하려면 다음과 같이 하십시오.
임시 브런치를 만듭니다("이 예에서는 리비전")
git checkout -b revision
첫 번째 커밋 대상으로 되감기
git reset --hard <commit_target>
관심 있는 사람에게 체리 따먹기
git cherry-pick <commit_interested> ...
diff 적용
git diff <commit-target>^
했을 때
git branch -D revision
@mipadi에서 지정한 방법으로 여러 파일을 사용하여 차이를 만드는 경우:
: : 이 between between between between between between between HEAD 당신의 ★★★★★★★★.master 모든 하려면 , 「」를 참조해 주세요..coffee 삭제:
git diff master..HEAD -- `find your_search_folder/ -name '*.coffee'`
으로 검색됩니다.your_search_folder/ 모로 보나.coffee 및 .master를 참조해당 버전.
Git의 멋을 이용하는 또 다른 방법일 뿐인데...
git difftool HEAD HEAD@{N} /PATH/FILE.ext
다른 모든 응답은 더 완전하므로 업베이트하십시오.이것은, 최근의 커밋의 ID를 모르는 것을 피할 수 있는 것을 기억하기 위해서입니다.보통 비교할 브런치에 자신을 설정하고 오래된 commit uid를 알고 diff 툴을 실행합니다(다른 표기법을 사용할 수 있습니다.
git checkout master
git difftool 6f8bba my/file/relative/path.py
또한 이 다른 응답을 체크하여 파일을 비교하기 위해 git를 여는 도구를 설정하십시오: .gitconfig를 사용하여 diff tool 설정.difftool에 대한 자세한 내용은 difftool 문서를 참조하십시오.
Visual Source Safe 또는 TFS(Team Foundation Server)에서와 같이 Windows에서 간단한 시각적 비교를 원하는 경우 다음을 수행하십시오.
- 파일 탐색기에서 파일을 마우스 오른쪽 버튼으로 클릭합니다.
- 'Git History'를 선택합니다.
참고: Windows 10으로 업그레이드한 후 Git 컨텍스트 메뉴 옵션을 잃어버렸습니다.그러나 명령 창에서 'gitk' 또는 'gitk filename'을 사용하여 동일한 작업을 수행할 수 있습니다.
'Git History'를 호출하면 Git GUI 툴이 시작되고 파일 내역이 왼쪽 상단에 표시됩니다.비교할 버전 중 하나를 선택합니다.그런 다음 두 번째 버전을 마우스 오른쪽 버튼으로 클릭하고 다음 중 하나를 선택합니다.
[ Diff this - ]를 선택합니다.
또는
[ Diff ]선택 ->이것
왼쪽 아래 페인에 색상으로 구분된 차이가 표시됩니다.
언급URL : https://stackoverflow.com/questions/3338126/how-do-i-diff-the-same-file-between-two-different-commits-on-the-same-branch
'programing' 카테고리의 다른 글
| 장고: openpyxl 워크북을 첨부 파일로 저장 (0) | 2023.04.15 |
|---|---|
| SQL 서버에서 INSER JOIN을 사용하여 여러 테이블에서 삭제하려면 어떻게 해야 합니까? (0) | 2023.04.15 |
| 추적되었지만 .gitignore에 있는 파일을 Git이 잊게 하려면 어떻게 해야 하나요? (0) | 2023.04.15 |
| SELECT 쿼리의 SQL Server LOCKS 이해 (0) | 2023.04.15 |
| 복사/붙여넣기 후 Excel의 자동 셀 참조 변경을 비활성화하려면 어떻게 해야 합니까? (0) | 2023.04.15 |

