Cómo get los cambios en una sucursal en Git

¿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
  • sin embargo, 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:

  • gbout – git branch saliente
  • gbin – git branch entrante

Puedes usar esto como:

  • Si está en master: gbin branch1 <- esto le mostrará lo que está en branch1 y no en master
  • Si está en master: gbout branch1 <- esto le mostrará lo que hay en master que no está en la twig 1

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:

  • es súper corto
  • muestra los cambios reales

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