Cómo obtener los cambios en una rama en Git

4 minutos de lectura

Como obtener los cambios en una rama en Git
greg hewgill

¿Cuál es la mejor manera de obtener un registro de confirmaciones en una rama desde el momento en que se ramificó desde la rama actual? Mi solución hasta ahora es:

git log $(git merge-base HEAD branch)..branch

la documentación para git-diff indica que git diff A...B es equivalente a git diff $(git-merge-base A B) B. Por otro lado, la documentación para git-rev-parse indica que r1...r2 Se define como r1 r2 --not $(git merge-base --all r1 r2).

¿Por qué son diferentes? Tenga en cuenta que git diff HEAD...branch me da las diferencias que quiero, pero el comando git log correspondiente me da más de lo que quiero.

En imágenes, supongamos esto:

         x---y---z---branch
        /
---a---b---c---d---e---HEAD

Me gustaría obtener un registro que contenga confirmaciones x, y, z.

  • git diff HEAD...branch da estos compromisos
  • sin embargo, git log HEAD...branch da x, y, z, c, d, e.

  • Estás usando “git log” incorrectamente para tus propósitos por lo que puedo ver. He agregado mi respuesta a continuación.

    – Debajito

    20 de noviembre de 2012 a las 2:32


Como obtener los cambios en una rama en Git
lirio ballard

En el contexto de una lista de revisión, A...B es como git-rev-parse lo define. git-log toma una lista de revisiones. git-diff no toma una lista de revisiones – toma una o dos revisiones, y ha definido el A...B sintaxis para indicar cómo se define en el git-diff página de manual Si git-diff no definió explícitamente A...B, entonces esa sintaxis no sería válida. Tenga en cuenta que el git-rev-parse la página de manual describe A...B en la sección “Especificación de rangos”, y todo en esa sección solo es válido en situaciones en las que un rango de revisión es válido (es decir, cuando se desea una lista de revisión).

Para obtener un registro que contenga solo x, y y z, intente git log HEAD..branch (dos puntos, no tres). Esto es identico a git log branch --not HEADy significa todas las confirmaciones en la rama que no están en HEAD.

  • Vaya, eso es confuso. Resulta que usar “git diff HEAD..branch” muestra todas las confirmaciones (x, y, z, c, d, e), pero “git log HEAD..branch” hace exactamente lo que quiero y solo muestra x, y , z! Esto es exactamente lo contrario de usar “…”.

    – Greg Hewgill

    10 de septiembre de 2008 a las 7:59

  • git diff HEAD..branch es idéntico a git diff HEAD branch. La clave para recordar aquí es que log toma una lista/rango de revisiones, mientras que diff no. Es por eso que tratan sus argumentos de manera diferente.

    – Lily Ballard

    11 de septiembre de 2008 a las 7:52

  • Parece que git diff HEAD...branch (tres puntos) corresponde a la salida de git log HEAD..branch

    – jchook

    31/10/2018 a las 15:20

  • BUEN DATO: Si desea ver todas las diferencias en la rama actual desde que se creó, use git difftool --dir-diff main (o maestro). Todos los cambios realizados se mostrarán en la herramienta de comparación y combinación visual definida. 😉

    –Eduardo Lucio

    12 de febrero a las 22:25

1646757851 634 Como obtener los cambios en una rama en Git
saltarín

git cherry branch [newbranch]

hace exactamente lo que le pides, cuando estás en el master rama.

Yo también soy muy aficionado a:

git diff --name-status branch [newbranch]

Que no es exactamente lo que estás preguntando, pero sigue siendo muy útil en el mismo contexto.

  • ‘git cherry’ genera una lista de ID de confirmación. ¿Puedo convertirlos en una única diferencia que combine todos los cambios en cada confirmación?

    –Jonathan Hartley

    20 de julio de 2011 a las 15:44

  • @JonathanHartley Toma el primero y el último como de los ID de compromiso y los arrojó al gif-diff: git diff x..zo para mi propio ejemplo es git diff 13bc4d..8eda3a.

    – towi

    22 de mayo de 2013 a las 9:37

  • Es difícil entender qué código debe reemplazarse en su comando, ya que uno de branch o newbranch es una palabra clave y cuál debe reemplazarse con un nombre de branch personalizado

    – pal4life

    16/06/2014 a las 17:50

Lo que quieres ver es la lista de confirmaciones salientes. Puedes hacer esto usando

git log master..branchName 

o

git log master..branchName --oneline

Donde asumo que “branchName” se creó como una rama de seguimiento de “master”.

Del mismo modo, para ver los cambios entrantes, puede usar:

git log branchName..master

  • @ABB, si se omite branchName, el valor predeterminado es “head”, que en realidad es branchName en el ejemplo anterior.

    – Debajito

    6 de noviembre de 2013 a las 1:27

1646757852 359 Como obtener los cambios en una rama en Git
Clintm

Esto es similar a la respuesta que publiqué en: Preview a Git push

Coloca estas funciones en tu perfil de Bash:

  • gbout – rama saliente de git
  • gbin – rama git entrante

Puedes usar esto como:

  • Si está en maestro: gbin branch1 <-- esto le mostrará qué hay en branch1 y no en master
  • Si está en el maestro: gbout branch1 <-- esto le mostrará qué hay en el maestro que no está en la rama 1

Esto funcionará con cualquier sucursal.

function parse_git_branch {
  git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
}

function gbin {
    echo branch \($1\) has these commits and \($(parse_git_branch)\) does not
    git log ..$1 --no-merges --format="%h | Author:%an | Date:%ad | %s" --date=local
}

function gbout {
    echo branch \($(parse_git_branch)\) has these commits and \($1\) does not
    git log $1.. --no-merges --format="%h | Author:%an | Date:%ad | %s" --date=local
}

1646757852 850 Como obtener los cambios en una rama en Git
Michael Durrant

Similar a varias respuestas como Alex V’s y NDavis, pero ninguna de ellas es exactamente igual.

Cuando ya esté en la sucursal en cuestión

Utilizando:

git diff master...

Que combina varias características:

  • es muy corto
  • muestra los cambios reales

Actualizar:

Esto probablemente debería ser git diff masterpero también esto muestra la diferencia, no las confirmaciones como se especificó en la pregunta.

  • si tienes git co master; git pull desde que creaste la rama, git diff master no será de mucha utilidad para que las diferencias se introduzcan SOLAMENTE mediante confirmaciones en la rama especificada.

    – gdvalderrama

    08/02/2017 a las 15:30

  • O para especificar ramas explícitamente: git diff <branch1>...<branch2> mostrará los cambios introducidos por branch2.

    – Alex

    15 de marzo de 2018 a las 2:00

Lance un -p allí para ver algunos CAMBIOS DE ARCHIVO

git log -p master..branch

Haz algunos alias:

alias gbc="git branch --no-color | sed -e '/^[^\*]/d' -e 's/* \\(.*\\)/\1/'"

alias gbl="git log -p master..\`gbc\`"

Vea las confirmaciones únicas de una rama:

gbl

  • si tienes git co master; git pull desde que creaste la rama, git diff master no será de mucha utilidad para que las diferencias se introduzcan SOLAMENTE mediante confirmaciones en la rama especificada.

    – gdvalderrama

    08/02/2017 a las 15:30

  • O para especificar ramas explícitamente: git diff <branch1>...<branch2> mostrará los cambios introducidos por branch2.

    – Alex

    15 de marzo de 2018 a las 2:00

Como obtener los cambios en una rama en Git
NDavis

Para ver el registro de la rama actual desde que se desvió del maestro:

git log master...

Si actualmente está en el maestro, para ver el registro de una rama diferente desde que se bifurcó del maestro:

git log ...other-branch

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad