¿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 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, suponga esto:
x --- y --- z --- rama / / --- a --- b --- c --- d --- e --- HEAD
Me gustaría obtener un registro que contenga commits x, y, z.
git diff HEAD...branch
da estos compromisos- sin embargo,
git log HEAD...branch
da x, y, z, c, d, e.
Respuestas:
En el contexto de una lista de revisión,
A...B
es cómo lagit-rev-parse
define. git-log toma una lista de revisión.git-diff
no toma una lista de revisiones: toma una o dos revisiones y ha definido laA...B
sintaxis para indicar cómo se define en la página degit-diff
manual. Sigit-diff
no se definió explícitamenteA...B
, entonces esa sintaxis sería inválida. Tenga en cuenta que la página degit-rev-parse
manual se describeA...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 contiene solo x, y, z, try
git log HEAD..branch
(dos puntos, no tres). Esto es idéntico agit log branch --not HEAD
, y significa todos los commits en la rama que no están en HEAD.fuente
git diff HEAD..branch
es idéntico algit diff HEAD branch
. La clave para recordar aquí es que el registro toma una lista / rango de revisiones, mientras que diff no. Es por eso que tratan sus argumentos de manera diferente.git diff HEAD...branch
(tres puntos) corresponde a la salida degit log HEAD..branch
hace exactamente lo que pides cuando estás en la
master
sucursal.También soy muy aficionado a:
Lo cual no es exactamente lo que estás preguntando, pero sigue siendo muy útil en el mismo contexto.
fuente
git cherry
es muy útil de hecho. Gracias :)gif-diff
:,git diff x..z
o para mi propio ejemplo, esgit diff 13bc4d..8eda3a
.Lo que quiere ver es la lista de confirmaciones salientes. Puedes hacer esto usando
o
Donde supongo que "branchName" se creó como una rama de seguimiento de "master".
Del mismo modo, para ver los cambios entrantes puede usar:
fuente
Esto es similar a la respuesta que publiqué en: Vista previa de un Git push
Coloque estas funciones en su perfil de Bash:
Puedes usar esto como:
Esto funcionará con cualquier rama.
fuente
Similar a varias respuestas como Alex V y NDavis, pero ninguna de ellas es la misma.
Cuando ya está en la sucursal en cuestión
Utilizando:
Que combina varias características:
Actualizar:
Esto probablemente debería ser
git diff master
, pero también muestra la diferencia, no las confirmaciones como la pregunta especificada.fuente
git co master; git pull
desde que creó la bifurcación,git diff master
no será de mucha utilidad obtener las diferencias introducidas SOLO por los commits en la bifurcación especificada.git diff <branch1>...<branch2>
mostrará los cambios introducidos porbranch2
.Lanza una -p allí para ver algunos CAMBIOS DE ARCHIVO
Haz algunos alias:
Vea los commits únicos de una sucursal:
fuente
Para ver el registro de la rama actual desde la ramificación 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
fuente
(3dots) pero a veces muestra '+' en lugar de '='
fuente
encontré
más útil, ya que no solo obtienes los mensajes de confirmación, sino toda la diferencia. Si ya está en la rama de la que desea ver los cambios y (por ejemplo) quiere ver qué ha cambiado en el maestro, puede usar:
fuente