gitに作成者の日付の指定された日付範囲のコミットを表示させる方法は?


86

どうやらこれ

git log --all --after="<date> 00:00" --before="<date> 23:59" --author="<author>"

コミッターの日付に基づいてコミットをフィルタリングします。指定された作成者の日付範囲のコミットを表示するにはどうすればよいですか?


回答:


41

少なくとも、Gitだけではできません。(この質問にアクセスする他の人へのリマインダー:作成者の日付を表示することではなく、作成者の日付、la /および/でコミットを選択することです。これらのセレクターは、作成者の日付ではなく、コミッターの日付を使用します。極端な例として、コミットを検討してください。コミッターの日付が2000年代になるように「今」作成されましたが、作成者の日付フィールドでは1999年のある日までさかのぼります。選択範囲が「世紀の変わり目に近いとき」である場合は、 -コミッターの日付が「現在」であり、1999年から10年以上経過しているため、このコミットを選択します。)--since--after--until--before

これはGitの小さなバグだと思います。コミッターの日付フィールドの使用をリクエストできる場所であればどこでも、作成者の日付フィールドの使用をリクエストできるはずです。これは簡単ですログの書式我々が持っているため、%ad%cdしてとのような、しかし、不可能選択をコミットします。最も近いのはgit rev-list、作成者の日付で並べ替えることができることです(一般的にトポロジカルソート内)。

git rev-listようなグローバルスイッチは、--use-author-date単純なパッチとして機能し、Gitに追加するのはそれほど難しくありませんが--min-author-age--max-author-ageなどと同様のフラグと「作成者の日付で並べ替え」フラグ(一般的な--topo-orderフラグ。両方のフラグを設定すると、--author-date-order)と同じ効果があります。

回避策として、すべての潜在的に興味深いコミットをリストし(git rev-listまたは同等のもの、たとえばgit log:日付フィルターを除いて、コミットを潜在的に興味深いものにする任意の指定子を使用する:この場合はそれだけです--all)、すべての作成者-日付フィールドを抽出できます(git log --format=%atまたは何でも)、コミットIDのリストを独自にプルーニングしてから、残りのコミットIDをに再送信しgit log --no-walkます。しかし、これはせいぜい苦痛です。詳細については、awk使用したTimBeigeleisenの回答を参照してください。


1
あなたの権限が私のために混乱を解消してくれてありがとう-これは長い間私を悩ませてきました、そして私は存在しないスイッチを見つけるためにマニュアルページを調べるのに多くの時間を費やしました。このためにすでに開いているバグはありますか?
mr_and_Mrs_D 2016年

Gitの人々がこれをバグと見なしているかどうかはわかりません。メーリングリストへのリンクについては、github.com / git / gitを参照してください。
torek 2016年

124

何かが足りないかもしれませんが、これで十分ではないでしょうか。

git log --pretty=format:"%ad - %an: %s" --after="2016-01-31" --until="2017-03-10" --author="John Doe"

こちらもご覧ください


18
@RossSolomon:作成者の日付を表示しますが、コミッターの日付で選択します。極端な例を挙げると、作成者の日付を1999に設定し、コミッターの日付を2017年1月1日に設定してコミットするとします。%adディレクティブは、それが2016年の前に道であっても、これは執筆-に-1999コミットを紹介します!
torek 2017年

7
「たぶん私は何かが足りない」はい、質問の全体のポイント。これは、コミット日に基づいてOPとまったく同じフィルタリング方法を使用しますが、必要なものを既にフィルタリングした後の作成者の日付を表示するだけです。18人はどうしてこんなに読解力が悪かったのでしょうか。
underscore_d

このコマンドは、-beforeおよび--afterのiso-8601日付形式では機能しません。私のために働くフォーマットは「dd-mm-ccyy」です。
hktegner 2018年

8
一般的には有用であるにもかかわらず、この回答は質問に対応していないため、反対票を投じます。
ravron

2
たとえそれが質問に答えなくても、私がたまたまこの答えに出くわし、私のいるが同じではない問題の解決策を見つけた場合、私はその答えを賛成します。しかし、これは答えが受け入れられるべきだという意味ではなく、誰かがそれを否定していることを私は理解しています。
Mefitico

31

あなたができる

しかし、@ torekが述べたように、純粋なGitではこれを実行できない可能性があります。1つのオプションは、いくつかのきれいな形式の出力をにパイプgit logawk、そこで作成者の日付を確認することです。

git log --date=iso --pretty=format:'%ad%x08%aN' | awk '$0 >= "2013-01-01" && $0 <= "2013-12-01"'

ここで、%adは作成者の日付をISO形式で%aN示し、作成者の名前を示します。


1
ありがとう-私は先に進み、Torekの答えをより包括的であるとして受け入れましたが、出発点を与えるためにあなたの答えを
支持しました

2

上記のTimBiegeleisenの回答に触発されました。

git log --all --date=iso --pretty=format:'%ad%x08%aN %s' | grep 2020-06-09 | sort -u

私が必要なことをしました。リベースとスカッシュが多いので、コミット日ではなく、作者の日付が欲しいです。しかし、私はインポートコミットの重要な日付を保持しています。

これに関連して、著者の電子メールをリセットできるが、元の著者の日付は保持できる小さなヘルパーがいます。--reset-authorはデフォルトで、作成者の日付を上書きします。

https://github.com/mathieujobin/git-scripts/blob/master/bin/git-reset-author-but-not-date

上記のgitログで、必要に応じて追加%Hしてgitshaを取得できます


1
きれいな形式の%x08は、バックスペースであるascii 08を意味するため、ISO形式の作成者の日付である前の%adの最後の桁を食べるので、このバリエーションを使用します(作成者名の後にコロンも追加されます):git log --all --date=iso --pretty=format:'%ad - %aN : %s' | grep 2020-09 | sort -u
sicko
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.