5

git log共有 GitHub リポジトリで、最近のコミットの一覧を表示するために使用したいと考えています。

現在の履歴は次のようになります。

                       (master)
B------Merge1--Merge2--Merge3
      /       /       / 
 - -C1       /       /
      - - -C2       /
 - - -C3----------C4

Mergeコミットがマージされたプル リクエストの結果であり、Cコミットがこのリポジトリのフォークからのものである場合。

git log次のようなものを示しています。

git log --oneline master
    Merge3
    Merge2
    Merge1
    B

しかし、私が本当に興味を持っているのはCコミットです。 git log --graphC1、C2、および C3 を表示するために私が見つけた唯一の方法です。

--graphC1、C2、および C3 を表示する他のオプション (を含まない) はありますか?

このようなことができるようになりたいです

git log --oneline --no-merges <...insert magic here...> master
 C4
 C3
 C2
 C1
 B

マニュアルページで見つけた唯一の賢明なことは ですが--first-parent、それを無効にしたり反転したりする方法が見つかりませんでした。

4

2 に答える 2

2

ブランチ チップで実際のマージ コミットを行ってマージとプルを行っていない場合は--no-ff、信頼できない指標になるため、マージ コミットを見たくない場合は、

git log --no-merges --oneline -n 10   # or --since, or something, might do 

コミット属性 rev-list が組み込みのカットオフ基準として持っていないコミット属性に基づいてリストにどれだけ戻るかを決定したい場合は、出力rev-listまたはより一般的にはいくつかのlog --pretty=format:選択でそれらの属性をフィルタリングするだけの問題です。 C1-C2-C4を取得して、選択したブランチにつながるマージされたブランチからのヒントのみをリストします-C4をバイパスすることにした方法がわからないため...

#!/bin/sh
git rev-list --parents "${@-HEAD}" \
| sed -n '/^[^ ]* [^ ]* /!q;s///;s/[^ ]*/&^!/gp' \
| xargs git log --oneline

シード:

/^[^ ]* [^ ]* /!q      # quit at first rev with less than two parents
s///                   # strip rev and its first parent
s/[^ ]*/&^!/gp         # append ^! to all other (merged) revs

^!接尾辞は、log親を自動的に含めないように指示します。

于 2013-10-18T04:35:21.463 に答える
1

考えられる解決策は--graph、sed および grep マジックを使用することです。これはちょっとうまくいきますが、ハッキーgit-logです。これが私のためにできることを望んでいました!

たとえば、コミット日ではなく、適切な順序を表示するには、追加のオプションが必要だと思います。

git log --oneline --graph     \
| sed -e 's|[^a-z0-9]*||1'    \
| egrep -v '^[a-z0-9]+ Merge' \
| egrep -v "^$"

1つ目は、モードが出力sedするブランチ「アスキーアート」を削除します。--graph1 つ目grepは、すべてのマージ コミットを削除します。2 番目grepは空行を削除します。

于 2013-10-18T07:02:22.317 に答える