Hoppla. Habe das nicht sorgfältig genug gelesen.
Die einzige Information in einem Commit ist die ID seiner Eltern (oder Eltern). Sie können nicht von einem Eltern-Commit zu einem Kind gelangen (dies ist der gerichtete Teil des Repositorys, der eine DAG ist).
Sieht man sich das genauer an, so sieht die Option --ancestry-path
für git log aus. Zum Beispiel gegeben:
* 85d26ab When compiling vim, also compile & install gvim
* 3146e5d Merge remote-tracking branch 'origin/devel' into deve
|\
| * 28d08e5 rebasing-merge: specify all commits explicitly
* | 006d11d Help 'file' find its magic file
|/
* e68531d (tag: Git-1.7.6-preview20110720) Update submodules
können wir die alle Kinder dieser beiden Commits bekommen
git log --oneline --ancestry-path B..E
verwenden, wenn Sie diese dann umgekehrt und die erste Pick-off - das ist F.
git rev-list --reverse --ancestry-path 28d08e5..006d11d | head -1
in meinem Fall, der 3146e5d zurückgibt.
das ist eine tolle Grafik, wie hast du das gemacht? –
Was ist, wenn es mehr als ein "erstes" gemeinsames Kind gibt? Zum Beispiel könnte es ein Commit geben, das eine Verschmelzung von B und E ist. – svick
Sie könnten die 'git rev-list --children'-Ausgabe hacken, so etwas wie dieser Typ: http://stackoverflow.com/questions/1761825/referending-the-kind-von-einem-commit-in-git. – ellotheth