Imaginez donc ce qui se passe (et que nous utilisons tous SourceTree):
- Nous travaillons tous hors origine / développement.
- Je pars en vacances pendant une semaine.
- Mon collègue travaille localement depuis plusieurs jours sans fusionner l'origine / le développement dans sa branche de développement locale.
- Il essaie de faire un push, on lui dit qu'il doit d'abord fusionner, puis fait un pull.
- Il obtient un conflit, empêchant la validation automatique après fusion de continuer.
- En supposant que Git est comme SVN, mon collègue supprime les "nouveaux" fichiers dans sa copie de travail, puis valide la fusion - en essuyant ces "nouveaux" fichiers de la tête d'origine / développement.
- Une semaine de travail de développement se poursuit en plus de cette révision.
- Je reviens de vacances et découvre qu'il manque plusieurs jours de travail.
Nous sommes tous très nouveaux à Git (c'est notre premier projet à l'utiliser), mais ce que j'ai fait pour le réparer était:
- Renommez "develop" en "develop_old".
- Fusionnez develop_old dans une nouvelle branche "develop_new".
- Réinitialisez la branche develop_new au dernier commit avant la mauvaise fusion.
- Cherry pick chaque commit depuis lors, un par un, résolvant les conflits à la main.
- Poussez develop_old et develop_new jusqu'à l'origine.
À ce stade, develop_new est, j'espère, une "bonne" copie de toutes nos modifications avec les semaines suivantes de travail réappliqué. Je suppose aussi que « Commit inverse » fera des choses bizarres sur une fusion, d' autant plus que la prochaine quelques semaines de travail est basé sur - et depuis cette fusion contient beaucoup de choses que nous ne voulons ainsi que des choses nous ne » t.
J'espère que cela ne se reproduira plus jamais, mais si cela se reproduit, j'aimerais connaître une manière plus facile / meilleure de réparer les choses. Y a-t-il une meilleure façon d'annuler une «mauvaise» fusion, alors que beaucoup de travail a été effectué dans le référentiel basé sur cette fusion?
git log
format préféré avec des annotations appropriées sur ce qui s'est passé lors des différents commits? (Je bifferais / annoteraisgit log --graph --pretty=oneline --abbrev-commit
et j'irais de là)