tag - qué tipos de etiquetas existen en git
¿Cómo obtener el historial de compromisos para una sola rama? (4)
Digamos que creé una nueva rama my_experiment
de master
e hice varias confirmaciones para my_experiment
. Si hago un git log
cuando my_experiment
en my_experiment
, veo las confirmaciones hechas a esta rama, pero también las confirmaciones hechas al master
antes de que se my_experiments
rama my_experiments
.
Me resultaría muy útil ver el historial de todos los commits de la rama my_experiments
hasta que my_experiments
la creación de esa rama, efectivamente una verdadera historia de esa rama. De lo contrario, no es claro para mí cuando miro en el registro si las confirmaciones estaban en la rama my_experiments
o no.
¿Hay alguna manera de hacer esto con Git?
Creo que una opción para tus propósitos es git log --oneline --decorate
. Esto le permite conocer la confirmación comprobada y los compromisos principales para cada rama que tenga en su línea argumental. Al hacer esto, tiene una buena visión de la estructura de su repositorio y las confirmaciones asociadas a una rama específica. Creo que leer this podría ayudar.
El comando git merge-base
se puede usar para encontrar un ancestro común. Entonces, si my_experiment aún no se ha fusionado en master y my_experiment se ha creado desde master, podría:
git log --oneline `git merge-base my_experiment master`..my_experiment
Nota: si limita ese registro a la última n confirmación (las últimas 3 confirmaciones, por ejemplo, git log -3), asegúrese de poner un espacio entre ''n'' y su bifurcación:
git log -3 master..
Antes de Git 2.1 (agosto de 2014), este error: git log -3master..
realidad te mostraría las últimas 3 confirmaciones de la rama actual (aquí my_experiment
), ignorando el límite master
(es decir, si my_experiment
contiene solo una confirmación, 3 seguiría estar en la lista, 2 de ellos del master
)
Ver commit e3fa568 por Junio C Hamano ( gitster
) :
revisión: analizar " git log -<count>
" con más cuidado
Esta línea de comando mal escrita simplemente ignora "
master
" y termina mostrando dos confirmaciones de laHEAD
actual:
$ git log -2master
porque alimentamos "
2master
" aatoi()
sin asegurarnos de que toda la cadena se analiza como un entero.Use la función auxiliar
strtol_i()
lugar.
Puedes usar un range para hacer eso.
git log master..
Si ha revisado su rama my_experiment
. Esto comparará dónde está el master
en HEAD
(la punta de my_experiment
).