He estado tratando de entender a los modelos de git branching. He estado buscando en http://nvie.com/posts/a-successful-git-branching-model/ algunas ideas y, viniendo de Subversion, una cosa que realmente estaba esperando era hacer un cambio en un solo lugar y fusionarlo con todas las sucursales que lo necesitaban. En Subversion, terminamos haciendo mucha copia de código.Git fusionando hotfix en múltiples ramas
Sin embargo, todavía no entiendo esto por completo. Este es un tipo de flujo de trabajo estándar que tengo y siempre surgirán conflictos.
# create new version branch
git checkout master
git checkout -b v3
vim pom.xml # change branch version to "3.1-SNAPSHOT"
git commit -a
git checkout master
vim pom.xml # change master version to "4.0-SNAPSHOT"
git commit -a
Así que el maestro está en 4.0-SNAPSHOT y la rama está en 3.1-SNAPSHOT.
No quiero crear una revisión en la rama y moverla a la línea externa.
git checkout v3
git checkout -b hotfix
vim file.txt # make a bugfix change
git commit -a
git checkout v3
git merge hotfix # this works fine
git checkout master
git merge hotfix # this has a conflict since both branches have changed the version
Entiendo por qué está sucediendo y tiene sentido. ¿Hay una mejor manera de hacer esto?
leí sobre cereza-escoge, que Probé y hace el trabajo:
git checkout v3
git cherry-pick a518b0b75eaf28868
git checkout master
git cherry-pick a518b0b75eaf28868
Sin embargo, eso no parece la forma "correcta" para manejar esto. ¿Alguna sugerencia?
Estoy de acuerdo (aunque creo que la respuesta de @ellotheth puede ser más elegante dependiendo de las circunstancias). De acuerdo con la filosofía [de ramificación] de git (http://gitster.livejournal.com/42247.html) realmente es diciendo que _este commit_ es lo único que pertenece a todas las ramas. Por lo tanto, es lo que "dice" eso. –
Gracias, creo que tiene sentido. Viniendo de Subversion, y lo doloroso que era a veces para nosotros aplicar soluciones al tronco y las ramas (básicamente haciendo la corrección dos veces), había pensado mentalmente que podía unir ramas de características en cualquier lugar que quisiera. Cuando eso no funcionó como esperaba, me sentí un poco decepcionado. "cherry-pick" tiene mucho sentido. Solo necesito llegar a un proceso que sea fácil de entender para todos los desarrolladores y creo que esto puede quedar bastante claro. –