¿Cuándo se introdujo un file en una twig dada de Git?

Usamos Git y Github. Tenemos dos twigs principales, staging y production . Cuando se asigna un nuevo proyecto / característica a un desarrollador, crean una nueva twig, la llaman feature-branch de feature-branch desde production , hacen sus cambios, confirman, presionan a GitHub y fusionan feature-branch con staging en staging usando GitHub. Cuando la function está list para entrar en funcionamiento, el desarrollador fusiona feature-branch con production usando GitHub. Todas las fusiones agregan un compromiso de merge .

Lo que sucedió fue que un desarrollador dijo que sus contenidos de la feature-branch estaban en production y nunca realizaron una fusión desde feature-branch de feature-branch hasta la production . Es posible que alguien se haya fusionado con la production accidentalmente.

Algunos desarrolladores cometen errores y estoy tratando de descubrir la raíz en donde sucedió y posiblemente revertirla correctamente. Esperaba que alguien pudiera ayudarme.

Lo que trato de hacer usando una combinación de GitHub, Git Bash y extensiones de Git es averiguar en qué momento un file en particular ingresó en una twig. El uso de la function de file history Git Extensions solo se muestra cuando se cometieron los cambios, no necesariamente cuando se fusionó en una twig.

¿Cómo puedo lograr esto? He buscado y usado muchas tácticas para encontrar loggings de files, como git log --pretty=online <branch> -- <file> encontrado en ¿ Cuándo se agregó un file a una twig en Git? .

Cualquier ayuda adicional sería apreciada. Por favor, avíseme si necesita más información y estaré encantado de proporcionarla.

Actualización # 1

Olvidé mencionar esto, que probablemente sea importante en este escenario. En feature-branch algunos cambios ( change-1 y change-2 ) se cometieron y fusionaron tanto en la staging como en la production . Luego, el desarrollador realizó más cambios ( changes-3 ) en su feature-branch y solo se fusionó con la staging en staging . Si bien la production debería tener el change-1 y el change-2 y no el change-3 , ¿cómo puedo averiguar en qué momento los changes-3 llegaron a la production ?

Lo que trato de hacer es […] averiguar en qué momento un file en particular ingresó a una sucursal.

Un problema con el enunciado del problema es que los files pueden renombrarse, y si simplemente ejecuta algo así como

 git log --pretty=online <branch> -- <file> 

solo se includeá en la list el file en cuestión llamado <file> . Sin embargo, la bandera de git log llamada --follow está en tu callejón; ver la página man de git-log :

--follow

Continúe enumerando el historial de un file más allá de cambiar el nombre (funciona solo para un solo file).

Aquí quieres correr

 git log --reverse --follow <branch> -- <file-in-question> 

La input de logging superior corresponderá al compromiso más antiguo (en el sentido cronológico) en el que aparezca <file-in-question> . Si desea get la confirmación más antigua (en el sentido topológico) en la que aparece <file-in-question> , debe agregar el --topo-order al command anterior.

git blame <filename> le dará detalles línea por línea del file con la identificación de confirmación y el nombre del comitente y la date y hora.