60

リポジトリのステータスの概要を取得するために、かなり複雑なgit-logコマンドを使用します。--date-orderしかし残念ながら、作成の日付ではなく、コミッター--date-orderの日付を使用しているようです。つまり、トピックブランチを現在のアップストリームにリベースして最新の状態にするたびに、トピックブランチの相対コミットの有用な時系列順が失われます(つまり、各ブランチが1つの長い行になります。そのコミットのうち、シーケンシャルでほぼ同一のコミッタータイムスタンプにリベースされました。)git-log

コミッターのタイムスタンプではなく、作成git-logのタイムスタンプでコミットを注文できれば、これは解決されます。誰かがそれを行う方法を知っていますか?


Googleの結果からこれにアクセスする場合は、以下のjosephdpurcellのソリューション(および詳細なブログ投稿!)を確認することをお勧めします。git-log各コミットに関する詳細なメッセージを含む、複数行の標準スタイルの出力を探している場合は、非常に優れています。

残念ながら、私はばかであり、ユースケースに関するより具体的な情報を提供しなかったため、この質問を修正する必要がありますgit-log。「<code>-graphモード」で使用し、git-logそれ自体を動作させる必要があります。著者-日付-順序で。私が確認できた限りでは、これはグラフの順序付けと印刷を処理するためgit-log、外部から行うことは完全に不可能です。git-log

スクリプト、またはのパッチgit-logが必要な場合があるようです。誰かが1.そのようなスクリプトを書くか、2 。フラグgitの組み合わせを含めるように作者に話しかけることができるまで、これを開いたままにしておきます。--author --date-order(=


参考までに、現在のglog関数の出力は次のようになり、並べ替える必要があります。

glog出力

4

4 に答える 4

77

gitバージョン1.8.4は;に--author-date-order引数を追加しました。リリースノートgit logによると、「出力はトポロジカルソートされ、並列履歴のコミットは、作成者のタイムスタンプに基づいて混合して表示されます。」

于 2013-09-18T12:10:09.360 に答える
23

さて、これは私が理解するのに非常に長い時間がかかりました(詳細)。要するに、私は不完全または不正確な多くの例を見つけました。次のコマンドは、あなたが期待することを実行します。

$ git log --pretty="format:%at %C(yellow)commit %H%Creset\nAuthor: %an <%ae>\nDate: %aD\n\n %s\n" | sort -r | cut -d" " -f2- | sed -e "s/\\\n/\\`echo -e '\n\r'`/g" | tr -d '\15\32' | less -R

このスクリプトと他のスクリプトは、GitHubのGitExtrasにあります。

于 2013-01-15T21:51:55.320 に答える
12

--date-order/--topo-order実際には、複数のブランチが別のブランチと一緒に実行されていることを表示しているときに、リビジョンリスト内のコミットの順序を制御するだけです。コミッター/オーサリングのタイムスタンプが遠い過去または未来であっても、「xはyの親」の関係は常に尊重されます。

のようなものが必要にgit log --pretty="format:%at %H" | sort -gなり、ハッシュをにフィードバックしますgit log

于 2011-12-20T16:44:38.357 に答える
2

jørgensenが提案したものに基づいて、あなたが探しているものを提供する可能性のある「ワンライナー」ソリューションがあります。見やすくするためにここでフォーマットされています。改善を歓迎します!

SORTED_GIT_LOGS=$(git log --pretty="format:%at %H" | sort -g | cut -d' ' -f2); \
    IFS=$(echo -en "\n\b"); for LOG in $SORTED_GIT_LOGS; do \
        git show --name-only $LOG; \
    done | less
于 2012-10-02T16:45:08.593 に答える