가지 사이의 자식 시각적 차이


196

이 대답은 git으로 체크인 된 두 파일 사이의 시각적 차이를 보는 데 유용합니다. 시각적 차이 프로그램으로 'git diff'출력을 보려면 어떻게합니까?

그러나 두 지점 사이의 시각적 차이를보고 싶습니다. 지금까지 내 최선의 방법은 다음과 같습니다.

git diff --name-status master dev

정보가 많지 않고 시각 적이지도 않습니다.

더 나은 것이 있습니까?


이전에 다루지 않은 비주얼을 포함하여 아래에 답변을 추가했습니다. (커밋에 어떤 커밋이 포함되어 있는지 (공통 또는 고유)) 핵심 자식 기능으로 할 수있는 일이 많이 있습니다. 시각적 차이에 포함 할 항목을 지정하는 것이 좋습니다. 대부분의 답변은 라인 단위의 커밋 차이에 중점을 둡니다. 여기서 예제는 주어진 커밋에 영향을받는 파일 이름에 중점을 둡니다.
Kay V

답변:


227

사용 git diff범위 .

git diff branch1..branch2

각 분기의 팁을 비교합니다.

GUI 소프트웨어를 정말로 원한다면 Mac OS X 및 Windows를 지원하는 SourceTree 와 같은 것을 사용해보십시오 .


27
시각적 인 행동이 아닙니다. ;)
해병대

35
리눅스 시스템에서 나는 설치를 권장 Meld다음 기본값으로 설정 difftool을 가진 git config --global diff.tool meld마지막으로 일반의 대신을 시작 diff으로 git difftool branch1..branch2. 결과는 훨씬 더 멋지게 보입니다.
Gabriel

8
사용 융합 자식 설정하지 않고 시각적 difftool을 :git difftool -t meld branch1..branch2
user3780389

2
독자를 위해 : 내 게시물을 기준으로 여기에있는 모든 답변은이 답변을 제외하고 사람이 요청한 내용 (GUI의 차이점)을 수행하는 방법을 제공합니다.
G Huxley

3
@GHuxley OP는 GUI 솔루션을 어디에서 요구합니까?
alex

97

두 분기 간의 모든 차이점에 대한 시각적 차이를 보려면 병합을 커밋하지 않고 두 분기를 병합 한 다음 git gui또는 git 확장을 사용 하여 차이점에 대한 개요를 얻습니다.

커밋하지 않고 병합하기위한 Git 명령 행 :

자식 체크 아웃 지점
git merge --no-commit --no-ff branchB

그런 다음, 병합을 취소 할 수 있습니다

자식 병합-중단

(설명을 위해 @jcugat의 h / t)


10
IDE (또는 항상 통합하기 쉽지 않은 Git GUI difftool)를 사용하고 싶다면이 방법의 관련성을 과소 평가하지 마십시오! Intellij를 사용하고 IDE에서 수정 된 파일을 모든 구문 강조, 오류 강조 표시, 데드 코드 강조 표시, 편집 가능한 내부 영광으로 돌리는 것을 선호하기 때문에이 옵션은 정말 좋습니다. 나는 모든 코드 리뷰 에이 접근 방식을 사용하고 GitHub의 심연 풀 요청 비교 도구를 남겨 두었습니다. 갈 때마다 편집을 할 수 있으며, 완료되면 "-code-review"가 추가되고 커밋 된 새 브랜치를 만듭니다!
kghastie

2
병합 충돌이없는 한 작동하며 병합 충돌이 있으면 실패합니다.
나가 키란

1
나는 그 접근법을 많이 좋아한다! 또한 적어도 저에게 git gui있어 충돌은 비 단계적, 비 충돌은 단계적이라는 것을 보여 주므로, 당신은 좋은 구별을 얻습니다. 최고의 답변보다 나를 위해 더 많은 것을 도와줍니다 : D
DJGummikuh

55

Intellij Idea IDE를 사용하는 경우 지점에서 비교 옵션을 사용할 수 있습니다.

여기에 이미지 설명을 입력하십시오


이 비교를 수정하기위한 구성 / 옵션 / 설정이 있습니까? (git diff의 경우 --ignore-space-at-eol과 같은)
Superole

49

gitk를 사용하여이 작업을 쉽게 수행 할 수도 있습니다.

> gitk branch1 branch2

먼저 branch1의 끝을 클릭하십시오. 이제 branch2의 끝을 마우스 오른쪽 버튼으로 클릭하고 Diff this-> selected를 선택하십시오.


7
사용 gitk branch1..branch2하면 두 개정 사이의 커밋 만 표시됩니다.
T3rm1

지점에서 변경 한 모든 내용을 보려면 gitk (branch1 branch2없이)를 사용하십시오.
mikewasmike

31

TortoiseGit을 사용하는 Windows 사용자의 경우이 모호한 기능을 통해 약간 시각적으로 비교할 수 있습니다.

  1. 비교하려는 폴더로 이동
  2. shift누른 상태 에서 마우스 오른쪽 버튼으로 클릭
  3. TortoiseGit으로 이동-> 참조 찾아보기
  4. ctrl비교할 두 가지를 선택하는 데 사용
  5. 선택 사항을 마우스 오른쪽 버튼으로 클릭하고 "선택한 심판 비교"를 클릭하십시오.

출처 : http://wikgren.fi/compare-diff-branches-in-tortoise-git-or-how-to-preview-changes-before-doing-a-merge/


왜 쉬프트를 누르고 있어야합니까?
Zero3

1
TortoiseGit이 특정 항목을 표시하지 않도록 구성한 경우 Shift 키를 누른 상태에서 마우스 오른쪽 버튼을 클릭하면 항상 전체 TortoiseGit 메뉴가 나타납니다.
Oversearch

대단해. 더 두드러진 기능 이었으면 좋겠다.
드류

22

OSX 또는 Windows 7 이상을 사용하는 경우 Atlassian SourceTree 가이 기능에 매우 적합합니다. 공짜 야.

단계별 diff 설정에서 단계별 변경 사항을 볼 수 있으며 원격 및 다른 두 가지와 로컬을 쉽게 비교할 수 있습니다. 여러 파일을 선택하면 diff가 다음과 같이 나타납니다.

여기에 이미지 설명을 입력하십시오

기능 분기를 체크 아웃 한 후 '마스터'와의 차이를보고 싶다면 '마스터'분기를 마우스 오른쪽 단추로 클릭하고 "현재와 비교"를 선택하십시오.

불행히도 * nix 배포판에서 언제 라도 사용할 수있는 것처럼 보이지 않습니다 .


3
'무료'일 수도 있지만 등록을 읽는 데 약간의 시간이 필요합니다. 이용 약관 : atlassian.com/legal/customer-agreement 지금까지 도구를 좋아했지만 이로 인해 저를 밀어 낼 수 있습니다.
akauppi

@akauppi 어느 부분에서 벗어 났습니까? 나는 모든 계약이 거의 동일하다고 생각했다
alex

1 년 전에 끝났습니다. 예, 계약은 비슷할 수 있지만 SourceTree가 나를 통해 추진 한 과정이었습니다. 이상했다. 그래도 Bygones. 자세한 내용은 없습니다. 죄송합니다
akauppi

16

"difftool"을 시도하십시오 (diff 도구 설정이 있다고 가정)-https://www.kernel.org/pub/software/scm/git/docs/git-difftool.html 참조

내가 찾을 이름 상태 요약에 대한 좋은 그러나 difftool는 변경 사항을 반복한다 (그리고 -d, 예를 옵션은 당신에게 디렉토리보기를 제공)

$ git difftool their-branch my-branch

Viewing: 'file1.txt'
Launch 'bc3' [Y/n]:
...

또는 @ rsilva4에서 언급하고 -d현재 분기를 기본값으로하는 것처럼 그냥 마스터와 비교하십시오.

$  git difftool -d master..

... 그렇습니다-많은 변형이 있습니다- //www.kernel.org/pub/software/scm/git/docs/git-reset.html


3
고맙습니다. 유용했습니다. -d 옵션을 추가하면 상황이 더 좋아질 것입니다.git difftool -d their-abc my-abc
rsilva4

explainshell.com을하기 때문에하는 -d 옵션을 구문 분석 할 수있을 것 같지 않습니다 여기에, 순간은 맨의 말씀입니다 :-d --dir-diff: Copy the modified files to a temporary location and perform a directory diff on them. This mode never prompts before launching the diff tool.
waldyrious

8

github을 사용하는 경우 웹 사이트를 사용할 수 있습니다.

github.com/url/to/your/repo/compare/SHA_of_tip_of_one_branch...SHA_of_tip_of_another_branch

두 가지 비교를 보여줍니다.


이것은 작동하지만 (항상 그렇게하지만) 코드를 github 저장소로 푸시해야합니다. 그래도 제 생각에는 받아 들일 수있는 경고는 아닙니다.
adamwong246

2
아니면 그냥 github.com/url/to/your/repo/compare/지점을 선택할 수 있습니다
람바

그리고 그 SHA를 어떻게 얻습니까? 지점 끝의 SHA는 무엇을 의미합니까?
Optimus Prime

8

에서 GitExtensions 당신은 개정 그리드의 두 가지를 선택할 수 있습니다 Ctrl눌렀습니다. 그러면 분기마다 다른 파일을 볼 수 있습니다. 파일을 선택하면 diff가 표시됩니다.

여기 에서 찍은


리비전 그리드에 2 개의 브랜치가 선택되었지만 맨 위에있는 메뉴 나 마우스 오른쪽 버튼을 클릭 할 때 비교 명령이 표시되지 않습니다.
Eric

1
아래쪽 창의 제목에서 찾았습니다. 커밋, 파일 트리 및 차이가 있습니다.
Eric

7

최신 정보

Mac : 이제 SourceTree를 사용합니다. 철저히 추천합니다. 나는 특히 당신이 덩어리를 스테이지 / 언 스테이지하는 방법을 좋아합니다.

리눅스 : 나는 다음과 같이 성공했다 :

  • smartgit
  • 깃 크라켄
  • meld

예를 들어 smartgitUbuntu 에 설치하려면 :


이것은 일을한다 :

meld와 같은 GUI diff 도구를 사용하는 git-diffall 여기에서 포인트 5를 참조하십시오.

http://rubyglazed.com/post/15772234418/git-ify-your-command-line

git과 meld에 대한 좋은 게시물이 있습니다 : http://nathanhoad.net/how-to-meld-for-git-diffs-in-ubuntu-hardy


4

Eclipse를 사용하는 경우 작업 공간의 현재 분기를 다른 태그 / 분기와 시각적으로 비교할 수 있습니다.

이클립스 작업 공간 비교


개인적으로 diffing sub-par에 대한 Eclipse 지원을 찾았지만 그게 전부라면 괜찮습니다.
ysap

4

Perforce의 무료 P4Merge를 사용하여 다음을 수행 할 수도 있습니다.

http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools

여기에 이미지 설명을 입력하십시오

Git과의 통합에 대한 자세한 내용은 여기여기 에서 찾을 수 있습니다

위의 링크에서 요약하면 다음과 같습니다.

  • ~ / .gitconfig에 다음 비트를 넣으면 p4merge를 수행 $ git mergetool하고 $ git difftool사용할 수 있습니다
  • 참고 $ git diff여전히 기본값을 사용합니다 인라인 DIFF 뷰어 : (자식 버전에서 테스트 1.8.2)

.gitconfig의 변경 사항

[merge]
  keepBackup = false
    tool = p4merge
[mergetool "p4merge"]
    cmd = /Applications/p4merge.app/Contents/Resources/launchp4merge "\"$PWD/$BASE\"" "\"$PWD/$REMOTE\"" "\"$PWD/$LOCAL\"" "\"$PWD/$MERGED\""
    keepTemporaries = false
    trustExitCode = false
    keepBackup = false
[diff]
    tool = p4merge
[difftool "p4merge"]
    cmd = /Applications/p4merge.app/Contents/Resources/launchp4merge "\"$REMOTE\"" "\"$LOCAL\""

2

우수한 WebStorm 편집기를 사용하는 경우 원하는 분기와 비교할 수 있습니다. 웹 스톰 git 비교


실제로 나는 IntelliJ IDEA (아마도 WebStorm)가 "선택하지 않은 커밋을 강조 표시"하는 기능을 가지고 있음을 알았습니다.
arthurakay

예, 방금 "intellij"를 사용하여 "자동 저장시 자동 형식 지정"을 통해 저장소 전체에서 수행 된 변경 사항을 선택적으로 롤오프했습니다. 매우 쉬웠습니다. "전과 비교"옵션을 찾아야했습니다
Tom H

1

보세요 git show-branch

핵심 자식 기능으로 할 수있는 일이 많이 있습니다. 시각적 차이에 포함 할 항목을 지정하는 것이 좋습니다. 대부분의 답변은 라인 단위의 커밋 차이에 중점을 둡니다. 여기서 예제는 주어진 커밋에 영향을받는 파일 이름에 중점을 둡니다.

해결되지 않은 것으로 보이는 한 가지 시각은 가지가 포함하는 커밋을 보는 방법입니다 (공통이든 고유한지).

이 비주얼을 위해 저는 큰 팬입니다 git show-branch. 분기당 잘 구성된 커밋 테이블을 공통 조상으로 나눕니다. -분기가있는 여러 분기가있는 리포지토리에서 시도 git show-branch하려면 출력을 입력 하고 확인하십시오-예제가있는 쓰기에 대해서는 Git 분 기간 커밋 비교를 참조 하십시오


0

다음은 Visual Studio에서 VS 2017에서 테스트 한 단일 파일과 달리 전체 커밋 간의 시각적 차이를 보는 방법입니다. 안타깝게도 한 분기 내의 커밋에만 작동합니다. "팀 탐색기"에서 "분기"보기를 ​​선택하고 저장소를 마우스 오른쪽 단추로 클릭 한 후 다음 이미지와 같이 "기록보기"를 선택하십시오.

여기에 이미지 설명을 입력하십시오

그러면 현재 지점의 기록이 기본 영역에 나타납니다. (현재 브랜치에서 이전 커밋으로 종료 된 브랜치는 레이블로 표시됩니다.) 이제 Ctrl-Left로 커밋을 두 번 선택한 다음 마우스 오른쪽 버튼을 클릭하고 팝업 메뉴에서 "커밋 비교 ..."를 선택하십시오.

Microsoft 세계에서 분기를 비교하는 방법에 대한 자세한 내용은이 stackoverflow 질문 : Visual Studio를 사용하는 git 분기의 차이점을 참조하십시오 .


1
단일 브랜치의 히스토리 만 표시하므로 브랜치 간 비교할 수 없습니다.
Michał Fita

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.