etc./StackOverFlow

두 가지 다른 지점의 파일을 비교하는 방법

청렴결백한 만능 재주꾼 2022. 1. 2. 04:54
반응형

질문자 :Micah


한 지점에서는 잘 작동하고 다른 지점에서는 손상된 스크립트가 있습니다. 두 버전을 나란히 놓고 무엇이 다른지 보고 싶습니다. 이 작업을 수행하는 방법이 있습니까?

분명히하기 위해 나는 비교 도구를 찾고 있지 않습니다 ( Beyond Compare 사용). 마스터 버전을 현재 분기 버전과 비교하여 변경된 사항을 확인할 수 있는 Git diff 명령을 찾고 있습니다. 나는 병합이나 다른 것의 중간에 있지 않습니다. 나는 단지 다음과 같은 말을 하고 싶다.

 git diff mybranch/myfile.cs master/myfile.cs


git diff 는 두 커밋의 차이점을 보여줄 수 있습니다.

 git diff mybranch master -- myfile.cs

또는 동등하게:

 git diff mybranch..master -- myfile.cs

파일에 대한 상대 경로를 지정해야 합니다. 파일이 src 디렉토리에 있다면 그래서, 당신은 말할 것 src/myfile.cs 대신 myfile.cs .

후자의 구문을 사용하면 어느 쪽이 HEAD 이면 생략될 수 있습니다(예: master..masterHEAD 와 비교).

mybranch...master 관심이 있을 수도 있습니다( git diff 문서에서 ).

이러한 형태는 제를 함유하는 분기 최대 변화를 볼 수있다 <commit> 모두의 공통 조상부터 <commit> . git diff A...Bgit diff $(git-merge-base AB) B 합니다.

mybranch 에서 분기되었기 때문에 master 에 변경 사항의 차이를 줄 것입니다 mybranch 에서 새로운 변경 사항은 없음).


모든 경우에 -- 구분 기호는 명령줄 플래그의 끝을 나타냅니다. 인수가 커밋이나 파일을 참조하는 경우 Git이 혼동하지 않는 한 이것은 선택 사항이지만 포함하는 것이 나쁜 습관은 아닙니다. 몇 가지 예 는 Git 체크아웃 이중 대시의 의미에 대한 Dietrich Epp의 답변을 참조하십시오.


구성된 인수가 있는 경우 git difftool


dahlbyk

당신은 이것을 할 수 있습니다: git diff branch1:path/to/file branch2:path/to/file

difftool을 구성한 경우 다음을 수행할 수도 있습니다. git difftool branch1:path/to/file branch2:path/to/file

관련 질문: 선호하는 diff 도구/뷰어로 'git diff' 출력을 보려면 어떻게 해야 합니까?


Tim Henigan

더 현대적인 구문:

 git diff ..master path/to/file

이중 점 접두사는 "현재 작업 디렉토리에서 다음으로"를 의미합니다. 다음과 같이 말할 수도 있습니다.

  • master.. , 즉 위의 반대입니다. master 와 동일합니다.
  • mybranch..master , 현재 작업 트리 이외의 상태를 명시적으로 참조합니다.
  • v2.0.1..master , 즉, 태그를 참조합니다.
  • [refspec]..[refspec] , 기본적으로 Git에 대한 코드 상태로 식별할 수 있는 모든 것입니다.

Joe Atzberger

두 가지 다른 분기의 파일을 비교하는 방법에는 여러 가지가 있습니다.

  • 옵션 1: n개의 특정 분기의 파일을 다른 특정 분기와 비교하려는 경우:

     git diff branch1name branch2name path/to/file

    예시:

     git diff mybranch/myfile.cs mysecondbranch/myfile.cs

    이 예에서는 "mybranch" 분기의 파일을 "mysecondbranch" 분기의 파일과 비교합니다.

  • 옵션 2: 간단한 방법:

     git diff branch1:file branch2:file

    예시:

     git diff mybranch:myfile.cs mysecondbranch:myfile.cs

    이 예는 옵션 1과 유사합니다.

  • 옵션 3: 현재 작업 디렉토리를 일부 분기와 비교하려면:

     git diff ..someBranch path/to/file

    예시:

     git diff ..master myfile.cs

    이 예에서는 실제 분기의 파일을 마스터 분기의 파일과 비교합니다.


Javier C.

현재 브랜치에 대해 diff를 만들고 싶다면 커밋하고 다음을 사용할 수 있습니다.

 git diff $BRANCH -- path/to/file

이렇게 하면 현재 분기와 참조된 분기( $BRANCH )가 다릅니다.


Paulo Fidalgo

나는 단순히 git diff branch1 branch2 path/to/file

이것은 파일 간의 차이점을 확인합니다. branch1 변경 사항은 빨간색으로 표시됩니다. branch2 변경 사항은 녹색으로 표시됩니다.

branch1 은 과거이고 branch2 는 미래라고 가정합니다. diff에서 분기의 순서를 반대로 하면 이것을 반대로 할 수 있습니다. git diff branch2 branch1


iGbanam

나는 dahlbyk의 답변에 동의합니다. 코드 검토를 위해 diff를 diff 파일에 작성하려면 다음 명령을 사용하십시오.

 git diff branch master -- filepath/filename.extension > filename.diff --cached

Azad

파일을 비교하는 두 가지 시나리오가 있습니다.

시나리오 1: 원격 분기에서 파일 비교(두 분기가 모두 원격 저장소에 있어야 함)

시나리오 2: 로컬 파일(로컬 작업 영역 사본에 있음)을 원격 저장소에 있는 파일과 비교합니다.

논리는 간단합니다. diff에 두 개의 분기 이름을 제공하면 항상 원격 분기를 비교하고, 하나의 분기 이름만 제공하면 항상 로컬 작업 복사본을 원격 저장소(제공한 것)와 비교합니다. 범위를 사용하여 원격 저장소를 제공할 수 있습니다.

예를 들어 지점을 확인하십시오.

 git checkout branch1
 git diff branch2 [filename]

당신은 파일 이름을 제공하는 경우이 경우, 그것은 "브랜치"라는 이름의 원격 지사와 파일 이름의 로컬 복사본을 비교합니다.

 git diff branch1 branch2 [filename]

이 경우 " branch1 " 대 " branch2 "라는 원격 분기의 파일 이름 을 비교합니다.

 git diff ..branch2 [filename]

이 경우에도 " branch1 " 대 " branch2 "라는 원격 분기의 파일 이름을 비교합니다. 따라서 위와 동일합니다. 그러나 다른 브랜치에서 방금 생성한 브랜치를 "master"라고 하고 현재 브랜치가 원격 저장소에 존재하지 않는 경우 원격 " master " 대 원격 " branch2 "를 비교합니다.


Dharmender Rawat

제 경우에는 아래 명령을 사용합니다.

 git diff <branch name> -- <path + file name>

이 명령은 두 개의 다른 분기에 있는 동일한 파일을 비교하는 데 도움이 될 수 있습니다.


SKT

가장 좋은 방법은 다음과 같은 방법으로 git diff

git diff <source_branch> <target_branch> -- file_path

해당 분기에 있는 파일 간의 차이를 확인합니다. Git 명령 과 작동 방식에 대한 자세한 내용은 이 기사를 참조하십시오.


Nesha Zoric

커밋 해시를 다음과 같이 사용합니다.

 git diff <hash1> <hash2> <filename>

여기서 hash1 은 모든 분기의 커밋이 될 수 있으며 hash2 도 마찬가지 입니다.


prometeu

Git Bash 에서 두 파일을 비교하려면 다음 명령을 사용해야 합니다.

 git diff <Branch name>..master -- Filename.extension

이 명령은 Bash 자체에 있는 두 파일의 차이점을 보여줍니다.


Rishav_SO

이러한 다양한 비교 방법에 대한 또 다른 흥미로운 점이 있습니다. 현재 분기의 파일을 다른 분기의 동일한 파일과 비교하고 싶습니다. 내가 사용하는 경우

 git difftool otherbranch.. filespec

실제로 내 임시 폴더에 있는 두 개의 파일을 비교하게 됩니다. 그러나 내가 사용하는 경우

 git difftool otherbranch filespec

내 임시 폴더(otherbranch 의 버전)에 있는 파일을 내 Git 폴더에 있는 실제 파일과 비교하는 것으로 끝납니다. a) 어느 것이 어느 것인지 훨씬 쉽게 알 수 있고 b) diff 도구를 사용할 수 있음을 의미합니다(Beyond 내 경우에는 4를 비교) 내 다른 분기에서 현재 분기로 변경 사항을 복사합니다.


Dave

출처 : http:www.stackoverflow.com/questions/4099742/how-to-compare-files-from-two-different-branches

반응형