tag - Cómo obtener los cambios en una sucursal en Git
¿qué herramienta podemos hacer para tener un mayor control de nuestros proyecto en github? (9)
¿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 AB) B
Por otro lado, la documentación 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 cuenta que la git diff HEAD...branch
me da las diferencias que quiero, pero el comando correspondiente de git log me da más de lo que quiero.
En imágenes, supongamos que 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.
En el contexto de una lista de revisión, A...B
es cómo git-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 la sintaxis A...B
para indicar cómo se define en la página de git-diff
. Si git-diff
no definiera explícitamente A...B
, entonces esa sintaxis sería inválida. Tenga en cuenta que la página de git-rev-parse
describe A...B
en la sección "Especificar 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 idéntico al git log branch --not HEAD
, no git log branch --not HEAD
, y significa todos los confirmaciones en la rama que no están en HEAD.
Esto es similar a la respuesta que publiqué en: Vista previa de un empuje de Git
Coloca estas funciones en tu perfil de Bash:
- gbout - rama de git saliente
- gbin - rama de git entrante
Puedes usar esto como:
- Si en master: gbin branch1 <- esto le mostrará lo que hay en branch1 y no en master
- Si en master: gbout branch1 <- esto le mostrará qué hay en master que no está en branch 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
}
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 utilizar:
git log branchName..master
Para ver el registro de la rama actual desde la bifurcación de maestro:
git log master...
Si actualmente está en el master, para ver el registro de una rama diferente, ya que se ramificó del maestro:
git log ...other-branch
Similar a varias respuestas como la de Alex V y NDavis, pero ninguna de ellas es exactamente la misma.
Cuando ya esté en la rama en cuestión.
Utilizando:
git diff master...
Que combina varias características:
- es super corto
- muestra los cambios reales
Actualizar:
Probablemente debería ser git diff master
, pero también muestra la diferencia, no las confirmaciones como la pregunta especificada.
Tire un -p allí para ver algunos CAMBIOS DE ARCHIVO
git log -p master..branch
Hacer algunos alias:
alias gbc="git branch --no-color | sed -e ''/^[^/*]/d'' -e ''s/* //(.*//)//1/''"
alias gbl=''git log -p master../`gbc/`''
Ver los compromisos únicos de una rama:
gbl
encontré
git diff <branch_with_changes> <branch_to_compare_to>
Más útil, ya que no solo obtienes los mensajes de confirmación sino todo el dif. Si ya está en la rama de la que desea ver los cambios y (por ejemplo) desea ver qué ha cambiado en el maestro, puede utilizar:
git diff HEAD master
git cherry branch [newbranch]
hace exactamente lo que estás preguntando, cuando estás en la rama master
.
También soy muy aficionado a:
git diff --name-status branch [newbranch]
Lo que no es exactamente lo que estás preguntando, pero sigue siendo muy útil en el mismo contexto.
git log --cherry-mark --oneline from_branch...to_branch
(3dots) pero a veces muestra ''+'' en lugar de ''=''