Encuentra todas las ramas que contienen un cambio en NOMBRE DE ARCHIVO (incluso si están antes del punto de rama (no registrado))
FILENAME="<filename>"
git log --all --format=%H $FILENAME | while read f; do git branch --contains $f; done | sort -u
Inspeccione manualmente:
gitk --all --date-order -- $FILENAME
Encuentra todos los cambios en FILENAME no combinados con el maestro:
git for-each-ref --format="%(refname:short)" refs/heads | grep -v master | while read br; do git cherry master $br | while read x h; do if [ "`git log -n 1 --format=%H $h -- $FILENAME`" = "$h" ]; then echo $br; fi; done; done | sort -u
git log -Schange …
ogit log --grep LOGMESSAGE …
(con… representando el resto del comando que mencioné)?gitk --all -- filename
que le mostrará gráficamente todos los cambios en ese archivo. Si puede identificar el compromiso en cuestión, puede usarlogit branch --contains
para ver a qué ramas ha migrado el compromiso. Si desea ver en qué rama se creó originalmente la confirmación en cuestión , busque en Google git-what-branch, pero tenga en cuenta que las fusiones de avance rápido pueden ocultar esa información.git log --all --format='--contains %H' "$file" | xargs git branch
Todo lo que necesitas es
Si desea conocer la rama de inmediato, también puede usar:
Además, si tuvo algún cambio de nombre, es posible que desee incluir
--follow
el comando de registro de Git.fuente
--source
allí y estará dorado.Parece que esto sigue siendo un problema sin una solución adecuada. No tengo suficientes créditos para comentar, así que aquí está mi pequeña contribución.
La primera solución de Seth Robertson funcionó un poco para mí, pero solo me dio ramas locales, entre las cuales había muchos falsos positivos, probablemente debido a fusiones de la rama estable.
La segunda solución de Adam Dymitruk no funcionó para mí en absoluto. Para empezar, ¿qué es --format =% 5? No es reconocido por git, no pude encontrar nada al respecto y no pude hacer que funcione con otras opciones de formato.
Pero su primera solución combinada con la opción --source y con un simple grep resultó útil:
Esto me proporciona una serie de etiquetas y ramas remotas y una rama local, donde hice los últimos cambios en el archivo. No estoy seguro de cuán completo es esto.
ACTUALIZAR según la solicitud de @nealmcb, ordenando las ramas por cambio más reciente:
Primero, puede cambiar el grep a "refs / heads /.*", lo que le dará solo las ramas locales. Si solo hay unas pocas ramas, puede examinar la última confirmación de cada una de esta manera:
Si hay más ramas y realmente desea automatizar esto, puede combinar los dos comandos usando xargs, formato de registro de git y otro tipo en esta línea:
Esto dará como resultado una salida como esta:
fuente
Sé que esta pregunta es antigua, pero seguí volviendo a ella antes de desarrollar mi propia solución. Siento que es más elegante y gracias al uso de la base de fusión se filtran las ramas no deseadas.
Si lo coloca en PATH como
git-find-changes
(con permisos ejecutables), puede llamarlo congit find-changes /path
Salida de ejemplo para
git find-changes app/models/
fuente
El siguiente es un método de fuerza bruta poco elegante, pero espero que funcione. Asegúrese de haber escondido primero los cambios no confirmados, ya que cambiará la rama en la que se encuentra actualmente.
fuente
git log -S
for-each-ref
embargo, no estoy seguro de que aún respete esashort
bandera. Dicho esto, ignore mi respuesta; las otras respuestas son mejores.