Me parece que Git, trabajando en árboles enteros como lo hace, se beneficia menos de la integración IDE que las herramientas de control de origen que están basadas en archivos o siguen un patrón de pago-edición-confirmación. Por supuesto, hay casos en los que puede ser bueno hacer clic en un botón para hacer un examen de historia, pero no lo extraño mucho.
El verdadero deber es hacer que su archivo .gitignore esté lleno de cosas que no deberían estar en un repositorio compartido. Los míos generalmente contienen (entre otras cosas) lo siguiente:
*.vcproj.*.user
*.ncb
*.aps
*.suo
pero esto está fuertemente sesgado en C ++ con poco o ningún uso de ninguna funcionalidad de estilo de asistente de clase.
Mi patrón de uso es similar al siguiente.
Código, código, código en Visual Studio.
Cuando esté contento (punto intermedio sensato para confirmar código, cambie a Git, cambie de escenario y revise las diferencias. Si algo está obviamente mal, vuelva a Visual Studio y corríjalo, de lo contrario, confirme.
Cualquier combinación, rama, rebase u otro material SCM elegante es fácil de hacer en Git desde el símbolo del sistema. Visual Studio normalmente está bastante contento con las cosas que cambian debajo de él, aunque a veces puede necesitar volver a cargar algunos proyectos si ha alterado significativamente los archivos del proyecto.
Me parece que la utilidad de Git supera cualquier inconveniente menor de no tener una integración IDE completa, pero es, en cierta medida, una cuestión de gustos.