¿Muestra confirmaciones que afectan a un file que no están en una twig de características?

Dada branch-a y git rebase origin/master branch-a , a veces obtienes conflictos en un file.

 CONFLICT (content): Merge conflict in .../file.txt 

Dado que antes de la rebase no había conflictos (por definición), entonces los conflictos solo pueden haber ocurrido b / c uno o más commits a .../file.txt .

Durante el process de resolución de conflictos, no puedo encontrar una manera de mostrar fácilmente "confirmaciones de origen / maestro que afectaron … / file.txt" para que pueda integrar esos cambios con mayor confianza.

 ---A---B---[C]---D \ \ E---[F]---G E'--[C/F']--G' 

ABCD es el desarrollo principal. EFG es el desarrollo de mi sucursal local. Commit C causó un conflicto en el file / commit F durante mi rebase local en D

Dado un estado separado HEAD o "rebasing", cuando hago git log -3 file.txt no parece mostrarme lo que quiero ver, que es WHAT fue el diff (es decir: commit C ) que causó el conflicto Estoy tratando de resolverlo ahora cuando aplique commit F

¿Cómo puedo get una list de confirmaciones que solo afectan a un file en particular y están dentro del range ABCD … sin include mis commits en EFG o la database actualmente activa --rebase ?

Solutions Collecting From Web of "¿Muestra confirmaciones que afectan a un file que no están en una twig de características?"

Deberías get el resultado que necesitas con:

 git log --patch --full-history A..D -- file.txt 

El --patch (o -p ) es probablemente lo principal que está buscando: muestra la diferencia para cada confirmación de session.

El --full-history evita que Git simplifique el historial al omitir confirmaciones basadas en el estado actual del tree de trabajo. Esto puede no ser necesario dependiendo de su situación específica.

El A..D limita el resultado a confirmaciones entre el compromiso A (exclusivo) y el compromiso D (inclusive). Esta es probablemente una forma más confiable de limitar los commits en lugar de -3 , suponiendo que tenga los refs para A y D mano. Y, de hecho, siempre será útil, porque D es la punta de su twig principal, y puede get A haciendo lo siguiente:

 git merge-base <mainline> <local> 

Un ejemplo concreto:

Suponga que la twig principal es master y la otra twig es feature .

 git rebase master feature # conflicts occur git log --patch --full-history $(git merge-base master feature)..master -- file.txt 

Para ahorrar time, también puede configurar un alias:

 git config --global alias.conflict-commits "! git log --patch --full-history $(git merge-base $1 $2)..$1 -- $3" 

Entonces úsalo como:

 git conflict-commits master feature file.txt 

Puede elegir la fuente para que el command log sea origin/master :

 git log origin/master -3 file.txt