Programing

현재 브랜치와 마스터 사이에 Git diff가 있지만 병합되지 않은 마스터 커밋은 포함되지 않습니다.

lottogame 2020. 6. 24. 07:56
반응형

현재 브랜치와 마스터 사이에 Git diff가 있지만 병합되지 않은 마스터 커밋은 포함되지 않습니다.


아직 마스터로 병합되지 않은 지점의 모든 변경 내용을 비교하고 싶습니다.

나는 시도했다 :

git diff master
git diff branch..master
git diff branch...master

그러나 이러한 각 경우에 diff에는 아직 내 지점으로 병합되지 않은 마스터의 내용이 포함되어 있습니다.

내 지점에 아직 병합되지 않은 마스터의 변경 사항을 제외하는 지점과 마스터간에 차이점을 수행하는 방법이 있습니까?


git diff `git merge-base master branch`..branch

병합 기준 은에서 branch분기 된 지점 입니다 master.

Git diff는이를위한 특별한 문법을 ​​지원합니다 :

git diff master...branch

당신은 다른 지점을 얻을 것이기 때문에 측면을 교환해서는 안됩니다. 반대 방향이 아닌 branch에서로 변경되어 변경된 내용을 알고 싶습니다 master.

느슨하게 관련됨 :


참고 .....기타 망할 놈의 도구와 같은 의미가없는 구문. 에 지정된 의미와 다릅니다 man gitrevisions.

인용 man git-diff:

  • git diff [--options] <commit> <commit> [--] [<path>…]

    이것은 임의의 두 가지 사이의 변화를보기위한 것 <commit>입니다.

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

    이것은 이전 양식과 동의어입니다. 경우 <commit>한쪽을 생략하고, 그것을 사용하는 것과 동일한 효과를 가질 것이다 HEAD대신한다.

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

    이 양식은 <commit>두 가지 공통 조상에서 시작 하여 두 번째까지 포함 된 분기의 변경 사항을 확인하기위한 것 <commit>입니다. " git diff A...B"는 " "와 같습니다 git diff $(git-merge-base A B) B. 중 하나를 생략하면 대신 <commit>사용하는 것과 같은 효과가 HEAD있습니다.

만약 당신이 이국적인 것을하고 있다면 <commit>, ".."표기법을 사용하는 마지막 두 형태를 제외하고는 위의 설명에서 모든 것이 될 수 있습니다 <tree>.

철자법에 대한 자세한 전체 목록 <commit>은의 "사양 수정"섹션을 참조하십시오 gitrevisions[7]. 그러나 "diff"는 범위가 아닌 두 끝점을 비교하는 것이며 범위 표기법 ( " <commit>..<commit>"및 " <commit>...<commit>")은의 "SPECIFYING RANGES"섹션에 정의 된 범위를 의미하지 않습니다 gitrevisions[7].


나를 위해 일한 것은 다음과 같습니다.

git diff origin/master...

이것은 현재 선택된 로컬 브랜치와 원격 마스터 브랜치 사이의 변경 사항 만 표시하며 병합 커밋에서 나온 로컬 브랜치의 모든 변경 사항은 무시합니다.


John Szakmeister와 VasiliNovikov가 언급했듯이 지점의 마스터 관점에서 전체 차이점을 얻는 가장 짧은 명령은 다음과 같습니다.

git diff master...

이것은 로컬 마스터 사본을 사용합니다.

특정 파일을 비교하려면 :

git diff master... filepath

출력 예 :

사용법 예

참고 URL : https://stackoverflow.com/questions/20808892/git-diff-between-current-branch-and-master-but-not-include-unmerged-master-com

반응형