Quiero encontrar el primer comprometerse a una rama específica, utilizando la biblioteca JGit de Eclipse. Por ejemplo, si tengo
master -- a -- c -- d -- e
\
feature b -- f -- g -- h
\
another j -- k -- l
// findBranchRoot() is the magic method we want to create
repository.resolve("feature").findBranchRoot().getId(); // this would return b
repository.resolve("another").findBranchRoot().getId(); // this would return j
¿Alguien sabe cómo hacer eso?
El problema que va a tener es que -y oso conmigo, aquí-commits no son "en" ramas. Para ver esto, considere el gráfico que dibujó. Es ambiguo. Inevitablemente así. Tu dibujaste
A---C---D---E master
\
B---F---G---H feature
\
J---k---L another
y simplemente no hay manera de determinar si B
fue hecho "sobre" feature
o another
(o, para el caso, cuál de los tres A
, fue hecho "en").
A---C---D---E master
\
B---J---K---L another
\
F---G---H feature
muestra exactamente la misma historia. Todo está en la forma que elija para interpretarlo.
Si quiere amarrar una confirmación de algún registro administrativo externo, poner un marcador en el mensaje de confirmación, que va a hacer, pero en Git sí mismo (y para el trabajo real) es la estructura de la historia que importa, no la forma en partes de él se hace referencia en este repo o aquello.
Si llega el momento de publicar feature
o another
, vas a cometer necesidad de presionar B
de cualquier manera, a menos que ya se ha empujado como parte de algún otro trabajo. Asuntos ascendencia. Nombres de rama no lo hacen.