2016-05-18 9 views
14

どうやらthis著者日付の指定された日付範囲にコミットを表示するにはどうすればいいですか?

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

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

+0

可能な重複[Gitのログ:コミットの作者の日付別フィルタ](https://stackoverflow.com/questions/13987273/git-log-filter-by-commits-author -date) –

答えて

7

少なくとも、Gitだけでは実行できません。 (この質問を訪れる他の人への注意:それは著者日付の表示に関するはありませんが、それはおよそ選択がによって作者日、ラ--since/--after--until/--beforeを犯したのですこれらのセレクタはコミッター日付ではなく、使用しています。コミッターの日付が2000年代になるように、コミッターの日付が1999年のある日に差し引かれるように、コミットが「今」に行われたという極端な例を考えてみましょう。選択範囲が「いつでもコミッターの日付が1999年を10年以上越えているので、このコミットの選択を解除します)。

私はこれをGitの小さなバグだと考えています。コミッターの日付フィールドを使用するように要求できる場所であれば、著者の日付フィールドを使用するように要求することができます。 %ad%cdなどがありますが、コミットの選択が不可能なので、のログフォーマットはで簡単です。。私たちがもっとも近いのは、git rev-listが著者日付でソートできることです(一般的なトポソート内)。

--use-author-dateようgit rev-listのグローバルスイッチは、単純なパッチとして機能するであろう、とGitリポジトリに追加するにはあまりにも難しいことではないだろうが、私は--min-author-age--max-author-ageまたは類似、および「並べ替えを持っている方が良いだろうと思います(一般的な--topo-orderフラグとは無関係に、フラグを設定すると、フラグは両方とも--author-date-orderと同じ効果を持ちます)。 (:日付フィルターを除いて、コミットは潜在的に興味深いものは何でも指定子の使用:などgit logなどgit rev-listまたは同等で、ちょうど--allだこのケースでは)回避策として

、あなたはすべての潜在的に興味深いコミットを一覧表示することができますし、すべてを抽出します(git log --format=%atなどを使用して)コミットIDのリストの独自のプルーニングを行い、残りのコミットIDをgit log --no-walkに再送信します。しかし、これはせいぜい痛いだけです。詳細はTim Beigeleisen's answer using awkを参照してください。

+0

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

+0

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

8

あなた

しかし、前述の@torekのように、純粋なGitではこれを行うことができない場合があります。 1つのオプションは、awkにパイプにgit logからかなりのフォーマット出力すること、およびそこに作者の日付を確認します:

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

は、%adはISO形式の作者の日付を与え、%aNは、著者名を与えます。

+0

ありがとうございました - 私は先に進み、Torekの答えをより包括的に受け入れましたが、出発点を与えるためにあなたをアップアップしました:) –

15

たぶん私は何かを見逃していますが、これでは十分ではありませんか?

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

も参照してくださいhere

+1

これは間違いなく受け入れられる回答でしょう。 –

+4

@RossSolomon:*著者の日付を表示しますが、*コミッタの日付を*指定します。極端な例を挙げると、著者の日付を1999年に設定し、コミッターの日付を01-01-2017に設定してコミットを行うとします。 '%ad'ディレクティブは、これが2016年以前の方法であったとしても、1999年にコミットされたコミットを表示します! – torek

+0

_「たぶん私は何かを見逃している」_はい。これはコミット日付に基づいて、OPと同じ**フィルタリング**の同じ方法を使用しますが、**は、自分が望むものを既に除外した後の著者の日付を**表示します。 18人はどのようにしてこのような悪い読解力を持っていましたか? –

関連する問題