He estado luchando contra la curva de aprendizaje de git/git-svn y anoche, como parte de esa curva de aprendizaje, hice algo muy, muy malo. Desde entonces lo he corregido, pero espero entender el error a mi manera.Usando git-svn: Pull, Merge or Rebase?
Tengo un repositorio svn del que he clonado el tronco y las ramas (etiquetas que ignoré porque no trabajamos en ellas). El uso de git, creé ramas locales para cada una de las ramas que actualmente necesidad de trabajar con:
$ git checkout -b trunk svn/trunk
$ git checkout -b feature1 svn/branches/development/feature1
$ git checkout -b maint svn/branches/maintenance/previous-version
hice feature1 mi rama activa e hice algunos cambios antes de dejarnos llevar por unos días. Volví a la pantalla ayer y quería integrar todos los cambios que se habían realizado en el maletero para poder trabajar con lo último y lo mejor. Lo que hice fue una actualización completa de todas las marcas primero, a través de git svn rebase (nadie más había trabajado en la rama feature1). Con todo actualizado desde mi repositorio svn, traté de volver a establecer la base.
Con feature1 como mi rama activa, hice un "git rebase trunk" pensando que estaría realizando cambios desde el tronco en la rama feature1. Resulta que estaba muy, muy mal. Después de fusionar todos los conflictos, hice git svn dcommit y encontré que mis cambios se habían aplicado al tronco.
Mi primera pregunta es simplemente ¿dónde estaba el error central en mi proceso de pensamiento? El segundo es que, después de leer mucho y buscar en Google, veo gente que defiende tirones, fusiones y rebases. Dado el hecho de que quiero fusionar los cambios aplicados en una rama local a otra rama local, ¿qué debería haber hecho? ¿Cuál es la mejor práctica para este escenario?
Gracias por su ayuda.
Tiene razón en que no estoy familiarizado con la implementación del modelo de datos (¿tiene algún URI bueno?). Si tuviera que leer mi declaración de rebase, ¿debería leerla como "git rebase [* from * active branch * to *] trunk" o eso es demasiado limitante? Gracias. –
* Git de abajo hacia arriba * (http://www.newartisans.com/blog_assets/git.from.bottom.up.pdf) y * Git Internals * (http://peepcode.com/products/git-internals -pdf) son muy buenos para entender la estructura de Git. (Git Internals cuesta $ 9; no recomiendo el screencast en Git en el mismo sitio). – Paul
Esa es una buena lectura del comando. Me resulta difícil recordar, ya que el objeto sobre el que se actúa es la rama desprotegida en muchos comandos de git. – Paul