Registro de Git para obtener confirmaciones solo para una rama específica

Resuelto dimirc asked hace 11 años • 0 respuestas

Quiero enumerar todas las confirmaciones que son solo parte de una rama específica.

A continuación, enumera todas las confirmaciones de la rama, pero también del padre (maestro)

git log mybranch

La otra opción que encontré fue excluir las confirmaciones a las que puede acceder el maestro y me da lo que quiero, PERO me gustaría evitar la necesidad de conocer los nombres de las otras ramas.

git log mybranch --not master

Estaba intentando usar git for-each-ref, pero también incluye mybranch, por lo que en realidad excluye todo:

git log mybranch --not $(git for-each-ref --format '^%(refname:short)' refs/heads/)

Actualizar:

Estoy probando una nueva opción que encontré hace un tiempo, y hasta ahora parece que esto podría ser lo que estaba buscando:

git log --walk-reflogs mybranch

Actualización (2013-02-13T15:08):

La opción --walk-reflogs es buena, pero verifiqué que hay un vencimiento para los reflogs (90 días predeterminado, gc.reflogExpire ).

Creo que encontré la respuesta que estaba buscando:

git log mybranch --not $(git for-each-ref --format='%(refname)' refs/heads/ | grep -v "refs/heads/mybranch")

Simplemente estoy eliminando la rama actual de la lista de ramas disponibles y usando esa lista para excluirla del registro. De esta manera solo obtengo las confirmaciones a las que solo llega mybranch .

dimirc avatar Feb 13 '13 14:02 dimirc
Aceptado

Por lo que parece que deberías usar cherry:

git cherry -v develop mybranch

Esto mostraría todas las confirmaciones que están contenidas en mybranch , pero NO en development . Si deja de lado la última opción ( mybranch ), comparará la rama actual.

Como señaló VonC, SIEMPRE estás comparando tu sucursal con otra sucursal, así que conoce tus sucursales y luego elige con cuál comparar.

Smilie avatar Jul 10 '2014 04:07 Smilie

PERO me gustaría evitar la necesidad de conocer los nombres de las otras sucursales.

No creo que esto sea posible: una rama en Git siempre se basa en otra o al menos en otra confirmación, como se explica en " git diff no muestra suficiente ":

ingrese la descripción de la imagen aquí

Necesita un punto de referencia para que su registro muestre las confirmaciones correctas.

Como se menciona en " GIT - ¿Desde dónde me ramifiqué? ":

las ramas son simplemente punteros a ciertas confirmaciones en un DAG

Entonces, incluso si git log master..mybranches una respuesta, todavía mostraría demasiadas confirmaciones, si mybranchse basa en myotherbranch, a su vez se basa en master.

Para encontrar esa referencia (el origen de tu rama), solo puedes analizar las confirmaciones y ver en qué rama están, como se ve en:

  • " Git: encontrar de qué rama proviene una confirmación ".
  • " ¿ Cómo puedo ver de qué rama se bifurcó otra rama? "
VonC avatar Feb 13 '2013 07:02 VonC

Finalmente encontré la manera de hacer lo que quería el OP. Es tan simple como:

git log --graph [branchname] 

git log --graph origin/[branchname] # if your local checkout isn't up to date

El comando mostrará todas las confirmaciones a las que se puede acceder desde la rama proporcionada en formato de gráfico. Pero puedes filtrar fácilmente todas las confirmaciones en esa rama mirando el gráfico de confirmaciones cuyo *es el primer carácter en la línea de confirmación.

Por ejemplo, veamos el extracto del git log --graph masterrepositorio GitHub de cakephp a continuación:

D:\Web Folder\cakephp>git log --graph master
*   commit 8314c2ff833280bbc7102cb6d4fcf62240cd3ac4
|\  Merge: c3f45e8 0459a35
| | Author: José Lorenzo Rodríguez <[email protected]>
| | Date:   Tue Aug 30 08:01:59 2016 +0200
| |
| |     Merge pull request #9367 from cakephp/fewer-allocations
| |
| |     Do fewer allocations for simple default values.
| |
| * commit 0459a35689fec80bd8dca41e31d244a126d9e15e
| | Author: Mark Story <[email protected]>
| | Date:   Mon Aug 29 22:21:16 2016 -0400
| |
| |     The action should only be defaulted when there are no patterns
| |
| |     Only default the action name when there is no default & no pattern
| |     defined.
| |
| * commit 80c123b9dbd1c1b3301ec1270adc6c07824aeb5c
| | Author: Mark Story <[email protected]>
| | Date:   Sun Aug 28 22:35:20 2016 -0400
| |
| |     Do fewer allocations for simple default values.
| |
| |     Don't allocate arrays when we are only assigning a single array key
| |     value.
| |
* |   commit c3f45e811e4b49fe27624b57c3eb8f4721a4323b
|\ \  Merge: 10e5734 43178fd
| |/  Author: Mark Story <[email protected]>
|/|   Date:   Mon Aug 29 22:15:30 2016 -0400
| |
| |       Merge pull request #9322 from cakephp/add-email-assertions
| |
| |       Add email assertions trait
| |
| * commit 43178fd55d7ef9a42706279fa275bb783063cf34
| | Author: Jad Bitar <[email protected]>
| | Date:   Mon Aug 29 17:43:29 2016 -0400
| |
| |     Fix `@since` in new files docblocks
| |

Como puede ver, solo confirma 8314c2ff833280bbc7102cb6d4fcf62240cd3ac4y c3f45e811e4b49fe27624b57c3eb8f4721a4323btiene *el primer carácter en las líneas de confirmación. Esas confirmaciones son de la rama maestra, mientras que las otras cuatro son de otras ramas.

Lukman avatar Aug 31 '2016 03:08 Lukman

Estoy usando los siguientes comandos:

git shortlog --no-merges --graph --abbrev-commit master..<mybranch>

o

git log --no-merges --oneline --decorate master..<mybranch>
SeeSharp avatar Apr 18 '2020 05:04 SeeSharp

Respuesta rápida:

git log $(git merge-base master b2)..HEAD

Digamos:

  1. Que tengas una rama maestra

  2. Haz algunas confirmaciones

  3. Creaste una rama llamada b2

  4. Hacer git log -n1; el ID de confirmación es la base de fusión entre b2 y master

  5. Haz algunas confirmaciones en b2

  6. git logmostrará su historial de registro de b2 y master

  7. Utilice el rango de confirmación, si no está familiarizado con el concepto, lo invito a buscarlo en Google o apilarlo en overflow-it.

    Para su contexto real, puede hacer, por ejemplo

    git log commitID_FOO..comitID_BAR
    

    El ".." es el operador de rango para el comando de registro.

    Eso significa, de forma sencilla, darme todos los registros más recientes que commitID_FOO...

  8. Mira el punto 4, la base de fusión.

    Entonces: git log COMMITID_mergeBASE..HEADte mostraré la diferencia.

  9. Git puede recuperar la base de fusión de esta manera

    git merge-base b2 master
    
  10. Finalmente puedes hacer:

    git log $(git merge-base master b2)..HEAD
    
Frederic Nault avatar Jan 18 '2014 14:01 Frederic Nault