線形履歴では、2 つのコミット A と B は、次の 3 つの状態のいずれかを持つことができます。
- A と B は同じコミットです
- A 厳密に B の前に
- B は厳密に A の前に
Git の非線形履歴により、4 つの追加オプションが可能になります
- A と B は親と子の両方を共有します
- A と B は親を共有していますが、子は共有していません
- A と B は子を共有していますが、親は共有していません
- AとBは何も共有しない
グラフトポイントを使用せずに最後の 2 つを達成する方法はわかりませんが、発生する可能性があります。
どのように達成すればよいかわからないのは、この関係を単純な方法で決定することです。現時点では、rev-list
各ケースを個別にテストするというやや奇妙で解決策しか思い浮かびません。
[[ "$a" = "$b" ]] && echo "same"
git rev-list "$b" | grep -q "$a" && echo "a before b"
git rev-list "$a" | grep -q "$b" && echo "b before a"
cat <(git rev-list "$a") <(git rev-list "$b") | sort | uniq -cd | grep -q 2 && echo "A and B share parents"
cat <(git rev-list --children "$a") <(git rev-list --children "$b") | sort | uniq -cd | grep -q 2 && echo "A and B share children"
これを行うには、より優れた、より適切な方法が必要です。それは何ですか?