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


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}어디 x2와x1 : 지점 / 커밋 / 예를 들어 비교하려는 태그입니다 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_n와 revision_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.