Git에서 병합을 무시하고 브랜치에 직접 만든 커밋 표시


86

git을 사용할 때 병합으로 가져온 모든 커밋을 무시하면서 브랜치에 대한 커밋을 표시하는 방법이 있습니까?

병합 된 다른 브랜치에서 만든 코드 변경 사항을 무시하면서 브랜치에서 만든 코드 변경을 검토하려고합니다. 그런 방식으로 차이를 표시하는 것이 거의 불가능하다는 것을 알고 있지만 할 수 있기를 바랍니다. 검토해야 할 커밋을 찾으십시오.

답변:


123

--no-merges

두 부모 모두 git의 여러 상황에서 동일한 가중치를 갖습니다. 다른 변경 사항을 병합하는 데 항상 일관성이 있었다면 이것이 원하는 것을 제공한다는 것을 알 수 있습니다.

git log --no-merges --first-parent

그렇지 않으면 다른 명명 된 분기에서 커밋을 제외 할 수 있습니다.

git log --no-merges ^other-branch-1 ^other-branch-2 ^other-branch-3

주 브랜치로 다시 병합 할 변경 사항을 검토하려는 경우 가장 쉬운 방법은 로컬 복제본에서 병합을 수행 한 다음 병합을 게시하기 전에 첫 번째 부모와의 차이점을 확인하는 것입니다.


이 첫 번째 명령은 "적절한 기능별 분기"( plus.google.com/109096274754593704906/posts/R4qkeyRadLR ) 에서 우수 합니다.
Adam Dymitruk

1
대부분 해당 브랜치에서 커밋을받는 것처럼 보이지만 여전히 마스터에서 가져온 커밋을 표시하고 있습니다. 지점이 너무 많아서 다른 지점을 제외하는 것은 비현실적입니다.
Channel Cat

@ChannelCat 브랜치를 다른 브랜치로 리베이스하면 모든 커밋이 끝날 것입니다.
Mark Ingram

7

git cherry이를 위해 사용할 수 있습니다. 아직 업스트림에 병합되지 않은 커밋 또는 한 브랜치에는 있지만 다른 브랜치에는없는 커밋을 찾을 수 있습니다. 따라서 "your-branch"및 "master"라는 두 개의 분기가 제공됩니다.

git cherry -v your-branch master

패치 ID와 비교하여 커밋 목록을 표시합니다.

+ c3e441bf4759d4aa698b4a413f1f03368206e82f Updated Readme
- 2a9b2f5ab1fdb9ee0a630e62ca7aebbebd77f9a7 Fixed formatting
+ e037c1d90b812af27dce6ed11d2db9454a6a74c2 Corrected spelling mistake

접두사가 "-"인 커밋은 두 브랜치 모두에 나타나는 반면, "+"접두사가 붙은 커밋은 브랜치에서만 사용할 수 있습니다.

대안으로 다음을 사용할 수 있습니다.

git log --pretty=format:"%h %s" your-branch..master --no-merges

"마스터"에 아직 존재하지 않는 "당신의 브랜치"에서 수행 된 커밋 목록을 보여줍니다.


귀하의 답변을 편집하려는 시도가 거부되었으므로 여기에 게시하겠습니다. 마지막 git 라인에는 분기 이름 사이에 두 개가 아닌 세 개의 점이 있어야합니다. 이렇게 : your-branch ... master
vedranm jul.

@vedranm 3 개의 점이 필요하지 않고 2 개만 필요합니다. 3 개는 2 개가 작동하는 방식과 동일합니다.
Zzzach ...

4

매우 험난한 방법 :

git log --graph --oneline --no-merges thebranch|grep '^\*'

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