web-dev-qa-db-ja.com

Git:マージされたブランチからではなく、このブランチでコミットを一覧表示する方法

Gitのコミット履歴が次のようになっているとします:

A---B---C---D---E---F master
     \         /
      X---Y---Z topic

Git listにマスターA-Fのコミットのみを含めることは可能ですか?言い換えると、コミットがマージされたブランチで行われた場合、表示したくありません。

76
wch

git logにはオプション--first-parentがあるため、topic履歴は取得されません。

masterからマージされると、masterコミットがマージの最初の親になります。 Gitログでは、-first-parentのコミットのみを表示できるため、適切なものを取得できます。

120
CharlesB

特定の状況で役立つ--first-parentに依存しない、これに関する別の一般的な方法があります。ブランチ除外フィルターの使用

git log Origin/topic ^Origin/masterこれにより、Origin/topicのコミットがすべて削除されたOrigin/masterのログが得られます。

--no-mergesを追加することもできます。これにより、必要な場合とそうでない場合があるマージコミットが非表示になります。

もう1つの便利なヒントは、shortlogの代わりにlogを使用することです。これにより、リリースノートやブランチの内容の伝達に役立つ略式の要約が得られます。

更新
これを読み直した後、実際に私が投稿した内容のほぼ逆を望むでしょう。ただし、masterおよびfoo(git log Origin/master ^Origin/foo)にあるすべてのものを除外することになります。ただし、git log Origin/master --no-mergesを使用して、必要なものを取得することもできます(マージの一部であるすべてのコミットを非表示にします)

17
UpAndAdam