Quindi immagina quanto segue (e che stiamo usando tutti SourceTree):
- Stiamo lavorando tutti sull'origine / sviluppo.
- Vado in vacanza per una settimana.
- Il mio collega ha lavorato localmente negli ultimi giorni senza fondere origine / sviluppo nel suo ramo di sviluppo locale.
- Prova a fare una spinta, gli viene detto che prima deve unirsi, quindi fa una spinta.
- Ottiene un conflitto, interrompendo la procedura automatica di commit-after-a-merge.
- Supponendo che Git sia come SVN, il mio collega scarta i "nuovi" file nella sua copia di lavoro e quindi commette l'unione - cancellando quei "nuovi" file dal capo origine / sviluppo.
- Una settimana di lavoro di sviluppo continua su quella revisione.
- Torno dalle vacanze e scopro che mancano diversi giorni al mio lavoro.
Siamo tutti molto nuovi in Git (questo è il nostro primo progetto che lo utilizza), ma quello che ho fatto per risolverlo è stato:
- Rinomina "sviluppo" in "sviluppo".
- Unisci Develop_old in un nuovo ramo "Develop_new".
- Ripristina il ramo develop_new sull'ultimo commit prima della fusione errata.
- Da allora Cherry seleziona ogni commit, uno per uno, risolvendo i conflitti a mano.
- Spingi Develop_old e Develop_new fino all'origine.
A questo punto, lo sviluppo è nuovo, spero, una "buona" copia di tutti i nostri cambiamenti con le settimane di lavoro successive riapplicate. Sono anche supponendo che "inversa commettere" farà cose strane su una fusione, soprattutto perché le prossime settimane vale la pena di lavoro si basa su di esso - e da quel unione contiene un sacco di cose che facciamo vogliamo insieme con roba noi don' t.
Spero che questo non accada mai più, ma se dovesse succedere di nuovo, mi piacerebbe sapere un modo più semplice / migliore di sistemare le cose. Esiste un modo migliore per annullare una fusione "cattiva", quando nel repository è stato svolto molto lavoro basato su tale unione?
git log
formato preferito con annotazioni appropriate su ciò che è accaduto nei vari commit? (Vorrei redarre / annotaregit log --graph --pretty=oneline --abbrev-commit
e passare da lì)