git에서 브랜치 간의 커밋 차이점을 어떻게 알 수 있습니까?


341

나는 branch-X에 있고 그 위에 몇 가지 커밋을 추가했습니다. 커밋 측면에서 MASTER와 지점 간의 모든 차이점을보고 싶습니다. 난 그냥 할 수

git checkout master
git log

그런 다음

git checkout branch-X
git log

시각적으로 차이가 있지만 더 쉽고 오류가 적은 방법을 원합니다.


답변:


324

가지가 어떻게 다른지에 대한 시각적으로 좋은 결과를 얻을 수 있습니다.

git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative master..branch-X

13
그것은 묻는 질문이지만 지점 간의 차이점을 보여주지는 않습니다.
Pablo Fernandez heelhook

48
git log --oneline --graph --all --decorate --abbrev-commit짧고 읽기 쉬운 명령으로 비슷한 결과를 얻을 수 있습니다
Pablo Fernandez heelhook

4
나는 이것을 좋아한다 :git log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset'
Avery

6
지나치게 복잡합니다.
Shawn Erquhart

12
git log --oneline --graph --all --decorate충분하다, --abbrev-commit필요하지 않다, --oneline짧다--pretty=oneline --abbrev-commit
avmohan

721

당신은 쉽게 그것을 할 수 있습니다

git log master..branch-X

그러면 브랜치 X가 가지고 있지만 커밋하지 않는 커밋이 표시됩니다.


9
두 브랜치에 다른 브랜치에는없는 커밋이 포함 된 경우 옵션이 있습니까? 지금 당장은 인수를 뒤집어 두 가지 방법으로 실행하여 다른 분기에 포함되지 않은 커밋을 볼 수 있습니다.
Elliott Slaughter

38
이미 전환 한 경우 다음을 branch-X사용할 수 있습니다git log master..
Dave

8
@ElliottSlaughter : master 또는 branch-X에 있지만 둘 다가 아닌 commit을 찾으려면 git log master...branch-X(2 대신 3 개의 점)을 사용할 수 있습니다 . 자세한 내용 man gitrevisions은 참조하십시오 .
Xavier T.

3
실제로 답의 절반에 불과합니다. 마스터가 분기를 분기시키는 커밋은 표시되지 않습니다.
jterm

9
커밋이 브랜치 -X에서 마스터로 선택되어 버린 경우 필터링되지 않습니다. 그들은 실제로 둘 다에 있더라도 "지점 X에서는 커밋되지 않은"커밋 목록에 있습니다.
Tuffwer

88

나는 그것이 선택과 맥락의 문제라고 생각합니다.

git log origin/master..origin/develop --oneline --no-merges

마스터 브랜치에 있지 않은 개발시 커밋을 표시합니다.

실제로 수정 된 파일을 보려면

git diff --stat origin/master..origin/develop --no-merges

인수를 지정하지 않으면 전체 diff가 표시됩니다. 시각적 차이를 보려면 meldLinux 또는 WinMergeWindows에 설치하십시오 . 그것들이 기본 difftools인지 확인하십시오.

git difftool -y origin/master..origin/develop --no-merges

현재 분기와 비교하려는 경우. 분기 이름 대신 HEAD를 사용하는 것이 더 편리합니다.

git fetch
git log origin/master..HEAD --oneline --no-merges

병합하려는 모든 커밋을 보여줍니다.


1
병합 될 수있는 릴리스 분기를 비교하는 경우 다음과 같은 매개 변수를 사용하여 병합 커밋 (값을 추가하지 않음)을 제거 할 수 있습니다 --no-merges.git log origin/master..HEAD --oneline --no-merges
claudiu.f.marginean 2016 년

15

Linux를 사용하는 경우 gitg 를 사용하는 경우 매우 빠르고 그래픽 적으로 처리 할 수 ​​있습니다.

명령 행을 고집하면 다음을 사용할 수 있습니다.

git log --oneline --decorate

git log기본적으로 더 좋게 만들기 위해 일반적으로 다음과 같은 전역 환경 설정을 설정합니다.

git config --global log.decorate true
git config --global log.abbrevCommit true

14

나는 "커밋에서"의 차이점을 보려면 다음을 제안합니다. 대칭적인 차이를 얻으려면 역 args로 명령을 반복하십시오.

git cherry -v master [your branch, or HEAD as default]

이것은 git master..branch-X와 다른가?
ilmirons

2
물론 "git cherry"은 현명하다. "commits"에서 "patches / diffs"로 변환하고 두 가지에 있지만 다른 순서로 적용되는 "patch"를보고하지 않아도된다.
mmaruska

8

gitk를 사용하려는 경우 :

gitk master..branch-X

그것은 좋은 구식 GUi가


4

완벽한 답변은 아니지만 Github을 사용하는 사람들에게 더 효과적 입니다.

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

리포지토리로 이동하십시오. Insights -> Network


또한 풀 요청을 작성하면 분기 차이도 표시됩니다.
pkamb

세상에 안아주고 싶어
esseara

@esseara 나도 큰 포옹을 해요 :)) 당신은 환영합니다 : D
AIon

2

커밋 메시지를 기준으로 비교하려면 다음을 수행하십시오.

git fetch
git log --oneline origin/master | cut -d' ' -f2- > master_log
git log --oneline origin/branch-X | cut -d' ' -f2- > branchx_log
diff <(sort master_log) <(sort branchx_log)

1
사용 --oneline및 배관 대신 cut사용할 수 있습니다git log --format='%s'
opticyclic

0
#! /bin/bash
if ((2==$#)); then
  a=$1
  b=$2
  alog=$(echo $a | tr '/' '-').log
  blog=$(echo $b | tr '/' '-').log
  git log --oneline $a > $alog
  git log --oneline $b > $blog
  diff $alog $blog
fi

시각적 diff 도구가있는 경우 a 및 b 로그를 시각적으로 나란히 나눌 수 있기 때문에이를 제공합니다. 시각적 diff 도구를 시작하려면 diff 명령을 명령으로 바꿉니다.


0

나는 답변 중 일부를 사용하고 내 사례에 맞는 것을 찾았습니다 (모든 작업이 릴리스 지점에 있는지 확인하십시오).

다른 방법도 잘 작동하지만 값을 추가하지 않는 병합 커밋과 같이 필요하지 않은 행을 추가 할 수 있음을 발견했습니다.

git fetch
git log origin/master..origin/release-1.1 --oneline --no-merges

또는 현재와 마스터를 비교할 수 있습니다

git fetch
git log origin/master..HEAD --oneline --no-merges

git fetch 업데이트 된 정보를 사용하고 있는지 확인하십시오.

이러한 방식으로 각 커밋이 한 줄에있게되고이를 텍스트 편집기에 복사 / 붙여 넣기하고 병합 할 커밋과 작업을 비교할 수 있습니다.

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