Dado que git utiliza un almacén de archivos con contenido accesible, debería ser posible encontrar un árbol arbitrario en alguna parte, pero no conozco los detalles. Supongo que podría copiar los archivos del directorio de trabajo separado en el directorio de trabajo del repositorio, luego confirmar todo, de alguna manera descubrir el hash del árbol creado por el commit y buscar los commit existentes para uno que haga referencia al mismo árbol .
Para que esto funcione, el árbol obviamente tendrá que coincidir perfectamente, por lo que no debe obtener ningún archivo no rastreado en la confirmación (como archivos de objeto, copias de seguridad de editor, etc.).
Editar: Acabo de probar esto en un repositorio (con git cat-file commit HEAD
para mostrar el objeto de árbol en HEAD, y buscando el resultado de git log --pretty=raw
para ese hash de árbol), y no funcionó (no encontré el hash en la historia). Obtuve un montón de advertencias sobre la conversión CRLF cuando hice la confirmación, por lo que ese podría haber sido el problema, es decir, probablemente obtenga hashes diferentes para el mismo árbol, dependiendo de cómo esté configurado su git para manipular los archivos de texto. Estoy marcando esta wiki de la comunidad de respuestas en caso de que alguien sepa cómo hacerlo de manera confiable.
La secuencia de comandos python falla totalmente cuando la probé. Salió un commit que estaba totalmente equivocado. –