2012-08-01 14 views
8

Un colega creó una rama local ('branchA') desde el maestro, hizo algo de trabajo, lo presionó, se fusionó en el maestro, hizo algo más de trabajo y lo volvió a presionar. Al mismo tiempo, otros colegas han estado trabajando en otras ramas y fusionándolas para dominar.git: Cómo ver confirmaciones en una sola rama

Ahora necesito extraer branchA para revisarlo. Así que he hecho un git pull y git checkout -b branchA origin/branchA que está bien. Pero todos los comandos (git diff/log/show) muestran los commits realizados en todas las ramas del repositorio.

¿Cómo puedo ver una diferencia de todas las confirmaciones hechas a branchA con respecto a la versión del master desde el que se creó?

¿Cómo puedo I git diff branchA contra el HEAD actual de master, pero solo ver los archivos cambiados dentro de branchA?

Respuesta

10

Lo siguiente se aplica a su segunda pregunta, cómo encontrar las diferencias entre branchA y su versión actual de locales de master. Desea utilizar la sintaxis de 'doble punto' con git log para ver todas las confirmaciones en branchA que no están en master. A saber:

git log master..branchA 

por la página git log hombre:

SYNOPSIS 
    git log [<options>] [<since>..<until>] [[--] <path>...] 
    ... 
    <since>..<until> 
    Show only commits between the named two commits. When either <since> or <until> is omitted, it defaults to HEAD, i.e. the tip of the current branch. 
    For a more complete list of ways to spell <since> and <until>, see gitrevisions(7). 

Si desea ver comete en cualquiera master o branchA, pero no en ambas, se puede utilizar 'triple punto' sintaxis:

git log master...branchA 

Por último, se puede utilizar la misma sintaxis exacta con git diff, a saber, git diff master..branchA y git diff master...branchA, respectivel y

Como un lado, si tiene branchA prestado, ni siquiera necesita especificarlo como <until>. Git asumirá HEAD si se deja sin especificar, por lo que estos dos conjuntos de comandos son equivalentes:

git checkout branchA 
git log master.. 

y

git log master..branchA 
0

puede utilizar git log = --branches MyBranch

Este registro mostrará en la rama específica

+0

Esto no funciona. Tal vez porque me he fusionado en el maestro, pero veo cambios hechos por otras personas. – user1491250

0

confirmaciones Git no conservan información sobre "qué rama" que se cometieron en. Solo te dan un punto en el árbol desde el que puedes caminar. Una vez que ocurre una combinación, no tiene forma, a partir de una confirmación de fusión, de decidir qué padre proviene de la sucursal desde la que comenzó. Esto se discute en algunos detalles over here.

Esto es lo que tengo entendido. Me encantaría que me corrijan si me equivoco.

2
  1. git diff master..brnachA: comparará todos los archivos modificados entre HEAD de master y branchA.
  2. git diff master...brnachA: comparará branchA con la versión de master desde la que se creó.

FYI: git diff generará salida en la línea de comandos. Si desea ver el resultado en algunas herramientas visuales, use git difftool.

Puede pasar todos los git diff argumentos y opciones al git difftool también.

+0

-2- no es del todo correcto. Devolverá commits en 'master' o' branchA' pero no en ambos. Si 'master' avanzó 50 commits, pero' branchA' se fusionó por completo, devolverá los 50 commits en el master. ¿Eso no compara 'branchA' contra su base de fusión en master, que parece ser la primera pregunta? – Christopher

Cuestiones relacionadas