2012-05-09 4 views
8

두 분기 간의 이전 병합 커밋을 어떻게 찾을 수 있습니까?이전 병합 커밋을 찾는 방법

마지막으로 릴리스 분기를 마스터 분기에 병합 한 이후로 내 마스터 분기에서 변경 사항을 확인하고 싶습니다. 마지막 분기 이후에 릴리스 분기의 변경 내용을 보려면 git diff ...release

분명히 git diff release...은 마지막 병합 이전의 모든 변경 사항을 포함하므로 분명히 작동하지 않습니다. 따라서 나는 git diff

git log --reverse --ancestry-path `git merge-base HEAD release`.. \ 
     --format=format:%H|head -n1 

이 작동하고 git diff $(...) 함께 사용할 수있는 것 같습니다에 전달하는 마지막 병합의 커밋 ID를 필요가 있다고 생각하지만, 굉장히 복잡한 것 같다. 좀 더 쉬운 해결책이 있습니까?

여기

I 
/\ 
A1 B1 
\ | 
| M 
| | 
A2 B2 

I 초기 커밋된다. A[12]은 릴리스 커밋이고 B[12]은 마스터 커밋입니다. M은 이전 커밋입니다. 이 예에서 마지막 병합과 마스터 사이의 변경 사항은 B2에 의해 도입 된 변경 사항 일뿐입니다. git merge-base A2 B2A을 반환하고 git diff B2 A1B1의 변경 내용을 포함합니다. 따라서 문제는 수동으로 M을 찾을 필요없이 git diff M B2을 실행할 수 있도록보다 복잡한 일반 경우에서 M을 찾는 방법입니다.

+0

이것은 가장 효율적인 방법은 아니지만 'git log --graph --oneline'을 보면 커밋을 찾을 수 있습니다. – Shahbaz

답변

-1

git log foo master --oneline --date-order --merges -1 

--oneline is just to keep the output short 
--date-order to get the latest first 
--merges to only show merge commits 
-1 to display the first result only 
+3

이 명령은 두 분기 중 마지막 병합을 제공합니다. 여기에는 master 또는 foo와 다른 것을 병합하는 것이 포함됩니다. 하지만 나는 마스터와 foo의 마지막 병합을 다른 것과 함께하고 싶지 않습니다. –

+0

이 명령은 하나의 브랜치만을 기록한 경우 한 브랜치에서 마지막 병합을 얻는 데 유용합니다 : git log master --online [...] –

6

당신을 위해 무엇을 찾고있는 것은 두 가지, 둘 사이가 아니라 마지막 병합 차이가 시작되는 지점 보인다 최신 병합 지점 foo는 및 지사 마스터 사이에 커밋 표시됩니다 가지. 이 두 가지 개념은 릴리스 분기가 병합 된 후 얼마 지나지 빨리 전달되었을 수 있기 때문에 다릅니다.

git merge-base master release은 마스터 및 릴리스 분기의 가장 최근 공통 조상 (즉, 두 가지 공통점이있는 마지막 커밋)을 찾습니다.

을 입력하면 git diff [common ancestor] HEAD을 사용하여 공통 조상 이후 master에 대한 변경 사항을 확인할 수 있습니다.

+0

다음과 같이 질문에 'git merge-base'가 표시되는 예제를 추가했습니다. 자체가 문제를 해결하지 못합니다. –

+0

@ 롤랜드 슐츠 알겠습니다. 나는 다른 대답을 제시하려고 노력할 것이다. –

관련 문제