Gitでのマージを無視して、ブランチに対して直接行われたコミットを表示する


87

gitを使用する場合、マージによってもたらされたすべてのコミットを無視して、ブランチに対して行われたコミットを表示する方法はありますか?

マージされた他のブランチで行ったコード変更を無視して、ブランチで行われたコード変更を確認しようとしています。そのような方法で差分を表示することはほぼ不可能ですが、できるようにしたいと思います。レビューする必要のあるコミットを見つけます。

回答:


124

--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 2011

1
ほとんどがそのブランチからコミットを取得しているように見えますが、それでもマスターからプルされたコミットが表示されています。支店が非常に多いため、他の支店を除外することは現実的ではありません。
チャンネルキャット

@ChannelCatブランチを他のブランチにリベースしてみませんか?そうすれば、すべてのコミットが最後になりますか?
マークイングラム

7

git cherryそのために使用できます。アップストリームにまだマージされていないコミット、または一方のブランチにはあるがもう一方のブランチにはないコミットが見つかります。したがって、「your-branch」と「master」という名前の2つのブランチが与えられます。

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行では、ブランチの名前の間に2つではなく3つのドットがあるはずです。このように:あなたのブランチ...マスター
vedranm

@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.