
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.

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 HEAD
y significa todas las confirmaciones en la rama que no están en HEAD.

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

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
}

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 master
pero también esto muestra la diferencia, no las confirmaciones como se especificó en la pregunta.
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

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