Pregunta

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

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

La documentación para diferencia git indica que git diff A...B es equivalente a git diff $(git-merge-base A B) B.Por otra parte, 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 las confirmaciones x, y, z.

  • git diff HEAD...branch da estos compromisos
  • sin embargo, git log HEAD...branch da x, y, z, c, d, e.
¿Fue útil?

Solución

En el contexto de una lista de revisión, A...B es como git-rev-parse lo define.git-log toma una lista de revisión. git-diff no requiere una lista de revisiones: requiere una o dos revisiones y ha definido el A...B sintaxis significa 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 "Especificar rangos", y todo lo contenido en esa sección solo es válido en situaciones donde 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 idéntico a git log branch --not HEAD, y significa todas las confirmaciones en la rama que no están en HEAD.

Otros consejos

git cherry branch [newbranch]

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

También me gustan mucho:

git diff --name-status branch [newbranch]

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

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 supongo que "branchName" se creó como una rama de seguimiento de "master".

De manera similar, para ver los cambios entrantes puedes usar:

git log branchName..master

Esto es similar a la respuesta que publiqué en: Vista previa de una inserción de Git

Coloque estas funciones en su perfil de Bash:

  • gabout - rama git saliente
  • gbin - rama git entrante

Puedes usar esto como:

  • Si está en maestro:Gbin Branch1 <- Esto te mostrará lo que hay en Branch1 y no en Master
  • Si está en maestro:Gbout Branch1 <- Esto te mostrará lo que hay en el maestro que no está en la Rama 1

Esto funcionará con cualquier rama.

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
}

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

Cuando ya esté en la sucursal en cuestión

Usando:

git diff master...

Que combina varias características:

  • es super corto
  • muestra los cambios reales

Actualizar:

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

Introduzca -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

Para ver el registro de la rama actual desde que se bifurcó en master:

git log master...

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

git log ...other-branch

git log --cherry-mark --oneline from_branch...to_branch

(3 puntos) pero a veces muestra '+' en lugar de '='

encontré

git diff <branch_with_changes> <branch_to_compare_to>

más útil, ya que no solo recibes los mensajes de confirmación sino también toda la diferencia.Si ya está en la rama de la que desea ver los cambios y (por ejemplo) desea ver qué ha cambiado en la rama maestra, puede usar:

git diff HEAD master
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top