0

2 つのコミット SHA1 がある場合、手動でgit ログを分析せずにどちらが最初に行われたかを取得するにはどうすればよいですか?

どれが別の祖先であるかを見つけようとしているわけではないことに注意してください。どちらが最初にプッシュされたかを知りたいのです。

コミット日ではなく、git履歴の時系列順に取得したい。どのような方法でも構いませんが、簡単な方法をお勧めします (スクリプトではなく、ターミナル エミュレータで直接使用しています)。


git merge-base@wRARが提案したように使用してみました。

まず、欠点がありgit merge-base --is-ancestorます。出力が得られません。stdout には何も出力せずに 0 または 1 で終了します。スクリプトを作成するときは問題ありませんが、端末で直接手動で使用する場合は、後で追加の手順 ( echo $?bash、$LASTEXITCODEPowerShell) で終了ステータスを確認する必要があります。契約を破るわけではありませんが、少し面倒です。

しかし、とにかく、うまくいきませんでした。

次のシナリオで動作します。

> git log --oneline --graph
| * <SHA1 D> Fourth commit.
| * <SHA1 C> Third commit.
| * <SHA1 B> Second commit.
| * <SHA1 A> First commit.
> git merge-base --is-ancestor <SHA1 B> <SHA1 C>
> echo $?
0
> git merge-base --is-ancestor <SHA1 C> <SHA1 B>
> echo $?
1

しかし、これではありません(私が意図したことはしません):

> git log --oneline --graph
*   <SHA1 D> Merged work.
|\
| * <SHA1 C> Paul's first commit.
* | <SHA1 B> John's second commit.
|/
* <SHA1 A> John's first commit.
> git merge-base --is-ancestor <SHA1 B> <SHA1 C>
> echo $?
1
> git merge-base --is-ancestor <SHA1 C> <SHA1 B>
1
4

2 に答える 2

1

両方のコミットのコミット日を比較する必要があります。これは、コミット日付フィールドを含むカスタム形式でgit show(または他の適切なコマンドで)表示できます。--format=fuller

于 2013-04-04T15:57:46.777 に答える
0

git知っている唯一の順序は、先祖関係によって与えられたものです。コミット時間などは、コミットが行われるマシンの (おそらく月に合わせて) クロックに依存し、その後数回修正/編集されたコミットの元のコミット インスタントである可能性があり、完全に偽物である可能性さえあります。

于 2013-04-04T16:20:20.797 に答える