¿Cómo elimino o elimino el "file no rastreado" huérfano? ¿Las twigs de confirmación se fusionaron en la twig de destino cuando se fusionaron de una list oculta de git?

Al observar el gráfico de revisión provisto por Tortoise Git, encontré una serie de confirmaciones que muestran una fusión de una twig huérfana. Un poco más de investigación demostró que el compromiso raíz de estas twigs huérfanas era, de hecho, el compromiso de files sin seguimiento de algunos depósitos que fueron fusionados en nuestra twig de desarrollo por uno de los miembros de nuestro equipo. Todas las twigs huérfanas mostradas en el gráfico de revisión eran del mismo miembro del equipo, así que estaba claro que era el resultado de algo que estaba haciendo en su process de administración del repository Git, que parece haber incluido la selección "Combinar en" del context menu para un alijo que se muestra en el cuadro de dialog de la list de escondites.

He estado buscando en el interweb ayuda sobre cómo "eliminar" o de lo contrario limpiar estos commits de files sin seguimiento de nuestra sucursal para limpiar a su vez nuestro gráfico de revisión para no mostrar estas twigs huérfanas. Hasta ahora no he podido encontrar nada. A lo mejor de mi determinación, no puedo ver ningún efecto adverso en la base de código real en las cabezas de bifurcación que incluyen estas twigs huérfanas, pero aún me gustaría eliminarlas o deshacerlas para limpiar el historial y la vista provistos por el gráfico de revisión. Cualquier sugerencia o idea sobre la situación que tenemos o comentar sobre otras posibles complicaciones que puedan derivarse de ella que no hemos considerado sería muy apreciada.

Gráfico de revisión de Tortoise Git mostrando ramas huérfanas

gracias por el time, Mike

ADVERTENCIA: el siguiente command reescribe el historial que, con frecuencia, es indeseable en repositorys compartidos. Esta respuesta supone que esto es aceptable.

git rebase sin --preserve-merges debería funcionar muy bien:

Así es como lo probé:

 mkdir test_orphan cd test_orphan/ git init echo "new file" > file1 git add file1 git commit -m "mainline" echo "some changes" >> file1 git commit -a -m "some changes" git checkout --orphan orphan echo "orphan changes" >> file2 git add file2 git commit -a -m "orphan changes" git checkout master git merge orphan echo "additional changes" >> file1 git commit -a -m "more changes" 

Eso debería dar como resultado una historia como esta ( git log --decorate --oneline --graph ):

 * 976e170 (HEAD, master) more changes * 7bbc2da Merge branch 'orphan' |\ | * 4a9d9c0 (orphan) orphan changes * c2a9ecb some changes * 1523991 mainline 

Ahora para volver a establecer esos cambios:

 git rebase 1523991 

Resultados en un tree que se ve así:

 * 3b63a46 (HEAD, master) more changes * c56d554 orphan changes * daa016c some changes * 1523991 mainline 

¿Cómo puede aplicar esto a su situación sin eliminar todas las confusiones de fusión?

  1. git checkout -b flattening <just after orphaned merge commit>
  2. git rebase <commit before orphaned merge commit>
  3. git checkout master
  4. git rebase -p <just after orphaned merge commit> --onto flattening