2 つのコミット SHA1 がある場合、手動でgit ログを分析せずにどちらが最初に行われたかを取得するにはどうすればよいですか?
どれが別の祖先であるかを見つけようとしているわけではないことに注意してください。どちらが最初にプッシュされたかを知りたいのです。
コミット日ではなく、git履歴の時系列順に取得したい。どのような方法でも構いませんが、簡単な方法をお勧めします (スクリプトではなく、ターミナル エミュレータで直接使用しています)。
git merge-base
@wRARが提案したように使用してみました。
まず、欠点がありgit merge-base --is-ancestor
ます。出力が得られません。stdout には何も出力せずに 0 または 1 で終了します。スクリプトを作成するときは問題ありませんが、端末で直接手動で使用する場合は、後で追加の手順 ( echo $?
bash、$LASTEXITCODE
PowerShell) で終了ステータスを確認する必要があります。契約を破るわけではありませんが、少し面倒です。
しかし、とにかく、うまくいきませんでした。
次のシナリオで動作します。
> 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