¿Cuál es la mejor manera de get un logging de confirmaciones en una sucursal desde el momento en que se ramificó desde la sucursal actual? Mi solución hasta ahora es:
git log $(git merge-base HEAD branch)..branch
La documentation para git-diff indica que git diff A...B
es equivalente a git diff $(git-merge-base AB) B
Por otro lado, la documentation de 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 count que la git diff HEAD...branch
me da los diffs que quiero, pero el command de logging git correspondiente me da más de lo que quiero.
En imágenes, supongamos esto:
x --- y --- z --- twig / --- a --- b --- c --- d --- e --- CABEZA
Me gustaría get un logging que contenga commits x, y, z.
git diff HEAD...branch
da estos commits git log HEAD...branch
da x, y, z, c, d, e. En el context de una list de revisión, A...B
es cómo lo define git-rev-parse
. git-log toma una list de revisión. git-diff
no toma una list de revisiones; toma una o dos revisiones, y ha definido la syntax A...B
para significar cómo se define en la página de git-diff
. Si git-diff
no definió explícitamente A...B
, entonces esa syntax sería inválida. Tenga en count que la página de git-rev-parse
describe A...B
en la sección "Especificación de ranges", y todo en esa sección solo es válido en situaciones donde un range de revisión es válido (es decir, cuando se desea una list de revisión).
Para get un logging que contenga solo x, y y z, intente con git log HEAD..branch
(dos puntos, no tres). Esto es idéntico a la git log branch --not HEAD
, y significa todos los commits en la twig que no están en HEAD.
git cherry branch [newbranch]
hace exactamente lo que estás preguntando, cuando estás en la twig master
.
También me gusta mucho:
git diff --name-status branch [newbranch]
Lo cual no es exactamente lo que estás preguntando, pero sigue siendo muy útil en el mismo context.
Lo que desea ver es la list de confirmaciones salientes. Puedes hacer esto usando
git log master..branchName
o
git log master..branchName --oneline
Donde supongo que se creó "branchName" como una twig de seguimiento de "master".
Del mismo modo, para ver los cambios entrantes, puede usar:
git log branchName..master
Esto es similar a la respuesta que publiqué en: Vista previa de un empuje de Git
Suelta estas funciones en tu perfil de Bash:
Puedes usar esto como:
Esto funcionará con cualquier twig.
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 la misma.
Cuando ya está en la twig en cuestión
Utilizando:
git diff master...
Que combina varias características:
Actualizar:
Esto probablemente debería ser git diff master
, pero también muestra el diff, no los commits como la pregunta especificada.
Lanza una -p 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 sucursal:
gbl
Para ver el logging de la twig actual desde la bifurcación del maestro:
git log master...
Si actualmente está en master, para ver el logging de una twig diferente desde que se bifurcó en master:
git log ...other-branch
git log --cherry-mark --oneline from_branch...to_branch
(3dots) pero a veces muestra '+' en lugar de '='
encontré
git diff <branch_with_changes> <branch_to_compare_to>
más útil, ya que no solo obtienes los posts de compromiso sino la diferencia completa. Si ya está en la sucursal y desea ver los cambios y (por ejemplo) desea ver qué ha cambiado al maestro, puede usar:
git diff HEAD master