Aprender rompiendo puede resultar en que pasas mucho tiempo reparando las partes rotas.
El problema: mi compañero y yo creamos ramas diferentes de un repositorio, (jugamos a hacer commits, push y a cambiarnos de ramas y seguimos desarrollando cada quién por su cuenta) y cuando necesitamos integrar de nuevo nuestras ramas al repo principal nos encontramos con este mensajito: «already up to date».
Pero no, los archivos de los tres repositorios son diferentes y de alguna manera los repositorios están al día.
Una búsqueda en google arroja muchos resultados, y en particular este de stackoverflow parece prometedor la cuestión es que después de leerlo, todavía no entiendo ni el problema, ni la solución.
Luego de dos día de flagelarme acudí a los hechiceros de FccCaracas, donde me recomendaron el siguiente procedimiento:
git checkout master && git reset HEAD --hard && git clean -dfx && git pull origin master
Esta primera línea te ubica en la rama máster, y hace ese reset. De todo lo que leí, aprendí que reset –hard y rebase no son comandos tan comunes, así que hay que estar bastante seguros de si es necesario utilizarlos.
Git Clean -dfx limpia los archivos que no son necesarios del repositorio (acá me volé las DLL y la base de datos de la aplicación que luego tuve que buscar otra vez). Y el último git pull origin master es para sincronizar el master local con los cambios del master en origin.
Acá me queda la duda de sí luego de ese último pull debí sincronizar mi master con el de origin 😦
git checkout Feature1 && git pull origin master
git checkout feature1 hace que se active mi repositorio, y al hacer el pull de master me traigo los posibles cambios que estén allá. Acá hay que ir a la herramienta de merge (en mi caso es Visual Studio) y solucionar los conflictos a mano. Luego los cambios se fijan con un commit
git add . && git commit -m "arreglar diferencias entre Feature1 y master" && git push -u origin Feature1
El último push lleva la rama Feature1 al origen. Hasta acá todo bien. Luego con la herramienta de VSTS realicé un pull request de Feature1 y master et voila.
Tuve que repetir el mismo proceso con la rama Feature2 de mi amigo.
Post-mortem
Me hubiera gustado pedir ayuda a un amigo que me explicara lo básico para no estar inventando. Aprendí más dañando, pero también invertí muchísimo tiempo.
También me hubiera gustado comenzar con un proyecto de una persona: mi repo y el de mi amigo estaban configurados diferente (el mío no hacía tracking del repo origin/feature) por lo que solucionar los dos problemas tomó dos soluciones diferentes.
Y bueno, ya vi que si tengo un par de horas trancado, mejor llamar a un amigo.