web-dev-qa-db-ja.com

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

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

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

78
Channel Cat

--no-merges

両方の親は、gitの多くのコンテキストで同じ重みを持っています。常に他の変更をマージすることに一貫性がある場合、これはあなたが望むものを与えることがわかるかもしれません。

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

そうしないと、他の名前付きブランチからコミットを除外できる場合があります。

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

プリンシパルブランチにマージする変更を確認する場合、最も簡単な方法は、ローカルクローンでマージを実行し、マージを公開する前に最初の親との差分を確認することです。

112
CB Bailey

そのために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

「ブランチ」で行われ、「マスター」にはまだ存在しないコミットのリストが表示されます

7
jbochniak

非常にハック的な方法:

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

4
fge