Imagine o seguinte: o que acontece (e todos nós estamos usando o SourceTree):
- Estamos todos trabalhando fora da origem / desenvolvimento.
- Eu vou de férias por uma semana.
- Meu colega de trabalho trabalha localmente há vários dias, sem mesclar origem / desenvolvimento de volta ao seu ramo de desenvolvimento local.
- Ele tenta dar um empurrão, é informado que ele precisa se fundir primeiro e depois faz um puxão.
- Ele entra em conflito, impedindo o processo automático de consolidação após mesclagem.
- Supondo que o Git seja como o SVN, meu colega de trabalho descarta os "novos" arquivos em sua cópia de trabalho e, em seguida, confirma a mesclagem - limpando esses "novos" arquivos da cabeça de origem / desenvolvimento.
- Uma semana de trabalho para desenvolvedores continua em cima dessa revisão.
- Volto de férias e descubro que faltam vários dias do meu trabalho.
Somos todos muito novos no Git (este é o nosso primeiro projeto a usá-lo), mas o que fiz para corrigi-lo foi:
- Renomeie "develop" para "develop_old".
- Mesclar develop_old em uma nova ramificação "develop_new".
- Redefina a ramificação develop_new para a última confirmação antes da mesclagem incorreta.
- Cherry escolhe cada commit desde então, um por um, resolvendo conflitos manualmente.
- Empurre develop_old e develop_new até a origem.
Neste ponto, develop_new é, espero, uma cópia "boa" de todas as nossas alterações com as semanas subsequentes no valor de trabalho reaplicado. Eu também estou assumindo que "reverso cometer" vai fazer coisas estranhas em um merge, especialmente desde que as próximas semanas de trabalho baseia-se sobre ele - e desde que de mesclagem contém um monte de coisas que não quero, juntamente com material que nós don' t.
Espero que isso nunca aconteça novamente, mas se acontecer novamente, gostaria de saber uma maneira mais fácil / melhor de consertar as coisas. Existe uma maneira melhor de desfazer uma mesclagem "ruim", quando muito trabalho foi feito no repositório com base nessa mesclagem?
git log
formato favorito com anotações apropriadas sobre o que aconteceu nos vários commits? (Eu redigir / anotargit log --graph --pretty=oneline --abbrev-commit
e ir a partir daí)