Así que imagina que sucede lo siguiente (y que todos estamos usando SourceTree):
- Todos estamos trabajando desde el origen / desarrollo.
- Me voy de vacaciones por una semana.
- Mi compañero de trabajo ha estado trabajando localmente durante los últimos días sin fusionar origen / desarrollo en su rama de desarrollo local.
- Intenta dar un empujón, le dicen que primero tiene que fusionarse y luego tira.
- Obtiene un conflicto, impidiendo que continúe la confirmación automática después de una fusión.
- Asumiendo que Git es como SVN, mi compañero de trabajo descarta los "nuevos" archivos en su copia de trabajo y luego confirma la fusión, borrando esos "nuevos" archivos del jefe de origen / desarrollo.
- Unas semanas de trabajo de desarrollo se suman a esa revisión.
- Regreso de vacaciones y descubro que faltan varios días de mi trabajo.
Todos somos muy nuevos en Git (este es nuestro primer proyecto usándolo), pero lo que hice para solucionarlo fue:
- Cambie el nombre de "revelar" a "revelar"
- Fusionar desarrollo_old en una nueva rama "desarrollo_nuevo".
- Restablezca la rama del desarrollo a la última confirmación antes de la fusión incorrecta.
- Cherry elige cada commit desde entonces, uno por uno, resolviendo conflictos a mano.
- Empuje desarrollo_veces y desarrollo_nuevo hasta el origen.
En este punto, desarrollo_nuevo es, espero, una copia "buena" de todos nuestros cambios con las semanas posteriores de trabajo reaplicadas. También estoy asumiendo que "cometen inversa" va a hacer cosas extrañas en una fusión, sobre todo porque las próximas semanas la pena de trabajo se basa en él - y puesto que de mezcla contiene una gran cantidad de cosas que sí queremos junto con cosas que don' t.
Espero que esto nunca vuelva a suceder, pero si vuelve a suceder, me gustaría saber de una manera más fácil / mejor de arreglar las cosas. ¿Existe una mejor manera de deshacer una fusión "mala", cuando se ha realizado mucho trabajo en el repositorio basado en esa fusión?
git logformato favorito con anotaciones apropiadas sobre lo que sucedió en las diferentes confirmaciones? (Redactaría / anotaríagit log --graph --pretty=oneline --abbrev-commite iría desde allí)