두 개정판간에 변경된 파일 표시


2105

잠시 분리 된 두 가지를 병합하고 수정 된 파일을 알고 싶습니다.

이 링크를 통해 왔습니다 : http://linux.yyz.us/git-howto.html 이것은 매우 유용했습니다.

내가 본 브랜치를 비교하는 도구는 다음과 같습니다.

  • git diff master..branch
  • git log master..branch
  • git shortlog master..branch

"git status master..branch"와 같이 두 분기간에 다른 파일 만 볼 수 있는지 궁금합니다.

새 도구를 만들지 않으면 지금 할 수있는 가장 가까운 방법이라고 생각합니다 (물론 파일이 두 번 이상 수정 된 경우 반복 표시됨).

  • git diff master..branch | grep "^diff"

내가 놓친 것이 있는지 궁금합니다 ...


12
이 질문의 제목이 오도하는 사람은 몇 명입니까? 실제로 두 브랜치 간의 파일 차이를 찾는 것입니다. 내가 찾은 것은 동일한 브랜치에서 두 개정판의 파일 차이점을 보는 방법이었습니다. 아니면 내가 유일한 사람입니까?
Sandeepan Nath

4
@ SandeepanNath : 자식에는 차이가 없습니다. 당신은 항상 개별 커밋을 언급하고 있습니다.
사무엘 오말리

@ SamuelO'Malley git을 처음 접했고 모든 브랜치가 마침내 마스터 브랜치에 병합되고 궁극적으로 마스터가 롤아웃되는 것처럼 보이는 일반적인 브랜칭 전략을 고려합니다. 이제 프로덕션이 이미 마스터이지만 롤업이 마지막 인 경우 (마지막 마스터 병합 후 마지막 롤아웃이 발생한 경우 한 번의 수정으로) 롤아웃 이벤트를 고려하여이 두 버전의 차이점을보고 싶습니다. 무엇이 출시 될지 알아보십시오. 마지막으로 병합 된 지점을보고 싶지 않습니다. 내가 틀렸다면 나를 바로 잡으십시오.
Sandeepan Nath

2
@ SandeepanNath : 분기 이름을 사용하는 대신 아래 답변을 가져 와서 커밋 ID를 대신 지정할 수 있습니다. 롤아웃 할 때 태그를 만들면 태그 이름으로 커밋을 참조 할 수도 있습니다.
사무엘 오말리

1
@SandeepanNath 2 개의 분기를 비교할 수 없으므로 개정을 지정해야합니다. 두 가지를 비교하는 것은 두 가지 개정을 비교하는 것입니다.
Bastien Vandamme

답변:


2574

현재 분기와 master분기 를 비교하려면

$ git diff --name-status master

두 가지를 비교하려면

$ git diff --name-status firstbranch..yourBranchName

에 읽어 git diff공식 문서 .


2
왼쪽의 각 지수는 무엇을 의미합니까 (M과 D가 많이 보임)?
gogogadgetinternet

15
@ user446936-git status man page @ kernel.org/pub/software/scm/git/docs/git-status.html 에서 글자의 의미를 확인할 수 있습니다 . 특히 M == 수정, D == 삭제
James Manning

12
git diff --name-status your_branch...masteryour_branch가 작성된 이후 마스터에서 발생한 변경 사항을 출력합니다.
Radu

1
이중 점 연산자는 diff가 짝을 이루기 때문에 불필요한 것입니다.
jub0bs

2
작업 트리에 알 수없는 수정이나 경로가 있습니다.
SuperUberDuper

408

시험

$ git diff --stat --color master..branchName

이렇게하면 동일한 수의 행을 사용하면서 각 변경에 대한 자세한 정보를 얻을 수 있습니다.

다른 방법으로 병합하는 경우 분기를 뒤집어 차이를 더 명확하게 파악할 수 있습니다.

$ git diff --stat --color branchName..master

77
git color ( config --global color.ui true) 를 설정 한 경우 (권장 ), --color를 건너 뛸 수 있습니다. (나는 lks-게으른 키보드 증후군이 있습니다.)
Art Swri

25
나는 당신과 함께 색상입니다! BTW 나는 말하려고했다 git config --global color.ui true– 완전하다.
Art Swri

2
작동하지 않고 오류가 발생합니다.fatal: ambiguous argument 'master..branchName': unknown revision or path not in the working tree.
Tomáš Zato-Monica Monica

7
@ TomášZato 죄송하지만 "branchName"을 지점 이름으로 바꿔야합니다.
Gerry

161

또한 자식은 저렴하고 쉬운 브랜칭을 가지고 있습니다. 병합에 문제가 있다고 생각되면 병합에 대한 분기를 만듭니다. 따라서 master변경 사항을 병합하고 bamaster의 코드가 필요한 분기 인 경우 다음을 수행 할 수 있습니다.

git checkout ba
git checkout -b ba-merge
git merge master
.... review new code and fix conflicts....
git commit
git checkout ba
git merge ba-merge
git branch -d ba-merge
git merge master

최종 결과는 분기를 조이기 전에 버리기 지점에서 병합을 시도해야한다는 것입니다. 내 자신이 엉 키면 ba-merge지점을 삭제 하고 다시 시작할 수 있습니다.


4
대박. 나는 그런 식으로 분기를 생각하지 않았습니다. 병합 할 때 이것이 "모범 사례"의 일부로 간주되어야한다고 생각합니다.
egelev

ba-marge를 ba로 다시 병합 할 때 충돌을 다시 해결해야 할 가능성이 있습니까?
Josef.B

2
@EricAnderson 그래, 그래프 야. SVN은 학교 책상 아래에 껌처럼 붙어 있습니다. 고마워.
Josef.B

1
바 병합이 이미 마스터가 있다면 왜 '자식 병합 마스터'마지막 단계를 어떻게해야합니까
qwebek을

당신은 그것을 떠날 수 있습니다. 이것이 유용한 이유 master는 코드를 검토하고 충돌을 해결하는 동안 새로운 물건이 들어 오기 때문입니다 .
Eric Anderson

58

누군가 두 가지에서 diff 파일을 생성하려고하는 경우 :

git diff master..otherbranch > myDiffFile.diff

2
이것은 특히 많은 차이점을 포함하는 큰 가지에서 유용합니다.
vandsh

차이가 실제로 클 때 유용합니다. 기본적으로 콘솔에 모든 diff가 표시되지는 않습니다 (이유가 궁금합니다). diff를 파일로 전달하는 것이 그러한 경우가됩니다.
로티 미 베스트

42

GUI 기반 방법도 있습니다.

gitk 를 사용할 수 있습니다 .

  1. 운영:

    $ gitk --all
    
  2. 지점의 커밋을 마우스 오른쪽 버튼으로 클릭 하고 팝업 메뉴 에서이 커밋 표시를 선택하십시오 .

  3. 다른 지점의 커밋을 마우스 오른쪽 버튼으로 클릭하고 Diff this-> 표시된 commit 또는 Diff marked commit-> this를 선택하십시오 .

그런 다음 오른쪽 하단 패널에 변경된 파일 목록이 있고 왼쪽 하단 패널에 diff 세부 사항이 있습니다.


3
@Orwellophile 나는 그것을하는 방법을 보여주기 위해 비디오 를 업로드 합니다. 나는 그것이 당신에게 도움이되기를 바랍니다.
Yantao Xie

와우, 나만을 위해, 나는 특별하다고 느낀다. 나중에 참조하고 추가 google-foo를 위해 delicious.com에 책갈피를 추가했습니다.
Orwellophile

심각하게 과소 평가 된 답변. 감사!
Koshinae

36

이 경우 meld를 사용하는 또 다른 옵션 :

git difftool -d master otherbranch

이를 통해 파일 간의 차이점을 확인할 수있을뿐만 아니라 특정 파일을 쉽게 가리키고 클릭 할 수 있습니다.


6
meld를 기본 difftool로 설정하고 싶을 수도 있습니다 : git config --global diff.tool meld
bwv549

1
이것은 내가 구성하는 difftool을 사용하기 때문에 내가 가장 좋아하는 것입니다.
요시야

OSX에서는 지원되지 않습니다. :-(
Mike S.

@MikeS. 이 답변을 확인하십시오. stackoverflow.com/a/12815806/151918 여기에는 OSX에 대한 지침이 포함되어 있습니다. 그것은 적어도 나를 위해 일합니다. 도움이되기를 바랍니다.
rsilva4

좋은. 그러나 -d옵션은 무엇입니까?
Scotty.NET

29

git을 사용하면 병합을 시도하고 결과가 마음에 들지 않으면 문제를 피할 수 있습니다. 잠재적 인 문제를 미리 찾는 것보다 쉬울 수 있습니다.


10
데이비드, 그것은 좋은 지적이지만, 사전에 무슨 일이 일어나고 있는지 아는 것이 좋을 것입니다 ...
johannix

18

특정 파일 사이에서만 변경 사항을 찾으려면 다음을 수행하십시오.

git diff branch1 branch2 -- myfile1.js myfile2.js

branch1은 선택 사항이며 branch1을 제공하지 않으면 현재 지점 (현재있는 지점)이 기본적으로 고려됩니다. 예 :

git diff master -- controller/index.js

15

공동 작업 또는 한 번에 여러 기능에 대해 작업 할 때 업스트림 또는 마스터에 지점에 포함되지 않은 작업이 포함되어 기본 차이점에 잘못 표시되는 것이 일반적입니다.

업스트림이 이동 한 경우 다음을 수행해야합니다.

git fetch
git diff origin/master...

git diff master를 사용하면 관련 변경 사항이 포함되거나 포함되지 않을 수 있습니다.



8

말할 수있는 두 가지가 있습니다

  • A (작업중인 지점)
  • B (비교하려는 다른 지점)

지점 A에 있기 때문에 입력 할 수 있습니다

git diff --color B

그러면 이것은 당신에게 출력을 줄 것입니다

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

이것에 대한 중요한 점은

  1. 초록색 텍스트가 지점 A에 있습니다.

  2. 지점 B에 빨간색으로 표시된 텍스트


8

여기에 많은 답변이 있지만 일반적으로 사용하는 것을 추가하고 싶었습니다. 비교하려는 지점 중 하나에있는 경우 일반적으로 다음 중 하나를 수행합니다. 이 답변을 위해 우리는 2 차 지점에 있다고 말할 것입니다. 당시에 필요한 뷰에 따라 선택한 항목에 따라 달라 지지만 대부분 두 번째 옵션 중 두 번째 옵션을 사용하고 있습니다. 첫 번째 옵션은 원본으로 되돌리려 고 할 때 유용 할 수 있습니다.

이것은 마스터를 우리가있는 지점 (2 차)과 비교하고 원래 코드는 추가 된 줄이되고 새 코드는 제거 된 줄로 간주됩니다

git diff ..master

또는

또한 마스터를 우리가있는 분기와 비교합니다 (2 차). 원래 코드는 이전 줄이고 새 코드는 새 줄입니다.

git diff master..

1

Github / Github Enterprise를 사용하는 경우 /compare저장소 경로 의 URL ( 예 : https://github.com/http4s/http4s/compare)을 눌러 웹 UI를 사용할 수 있습니다 . 비교할 브랜치 / 커밋 / 태그를 선택할 수 있습니다. Github 비교 스크린 샷

그리고 DIFF는 URL의 GitHub의 인터페이스에 표시됩니다 /compare/{x1}...{x2}어디 x2x1 : 지점 / 커밋 / 예를 들어 비교하려는 태그입니다 https://github.com/http4s/http4s/compare/release-0.18.x을 ...석사

Github Doc 에서 더 많은 것을 볼 수 있습니다 .


0

GUI 솔루션을 찾는 사람들을 위해 Git Cola 는 매우 멋진 "분기점 뷰어 ( Diff- > Branches .. )"를 가지고 있습니다.


-1
git diff revision_n revision_m

경우 revision_nrevision_m연속 커밋이 다음은 동일한 출력 git show revision_m



-2

GUI를 좋아하고 Windows를 사용하는 경우 쉬운 방법이 있습니다.

  1. WinMerge 다운로드
  2. 다른 폴더에 두 지점을 확인
  3. WinMerge를 사용하여 폴더별로 폴더를 비교하십시오. 분기 중 하나가 작업중인 분기 인 경우에도 쉽게 수정할 수 있습니다.

가장 간단한 방법은 아니지만 실제로 브랜치 사이를 비교하기 위해 저장소를 다운로드 할 필요가 없습니다.
stefgosselin

실제로 가장 간단한 방법은 아니지만 GUI 방식으로, 특히 모든 파일의 차이를 보는 것이 훨씬 쉽습니다.
Marius Matioc

-3

TortoiseGit 등을 사용하여 변경된 파일의 분기를 쉽게 비교할 수도 있습니다 . 참조 찾아보기를 클릭 하고 비교하려는 분기를 선택하십시오.

당신이 비교 예를 들어 지사를 함께 마스터 당신은 변경 될 파일의 결과 목록으로 얻을 것이다 마스터 병합 결정하는 경우에 당신의-지점마스터 .

비교할 경우 다른 결과가있을 것이라는 점을 Remmber 마스터 와 함께 당신의 분기귀하의 분기마스터 .


1
문제는 기본 자식 유틸리티에 대한 것 같다
블라디미르 Hraban에게
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.