2010-04-08 18 views
8

Tengo un escenario siguiente:Git ramificación/rebase buenas prácticas

3 ramas:
- Maestro
- MyBranch bifurca maestro con el propósito de desarrollar una nueva característica del sistema
- MyBranchLocal ramificado MyBranch como mi copia local de la sucursal

MyBranch está siendo modificado y promocionado por otros desarrolladores (que están trabajando en la misma función que yo).

Como propietario de la rama MyBranch, quiero mantenerlo sincronizado con Master mediante el rebasado. También necesito fusionar los cambios que realizo en MyBranchLocal con MyBranch.

¿Cuál es una buena manera de hacerlo?

Pareja de posibles escenarios que intentó hasta el momento:

I.
1. Comprometerse a cambio MyBranchLocal
2. Rebase MyBranch contra el Maestro
3. Rebase MyBranchLocal contra MyBranch
MyBranch 4. Combinar con MyBranchLocal

II.
1. Commit cambio a MyBranchLocal
2. MyBranch de mezcla con MyBranchLocal
3. Rebase MyBranch contra Maestro
4. Rebase MyBranchLocal contra MyBranch

III.
1. Comprometerse a cambio MyBranchLocal
2. Rebase MyBranch contra el Maestro
3. MyBranch de mezcla con MyBranchLocal
4. Rebase MyBranchLocal contra MyBranch

Ya sé que el escenario III parece estar metiendo la historia comprometer hasta mucho, potencialmente duplicar compromisos.

¿Cuál es su experiencia? ¿Qué escenarios recomienda para minimizar el esfuerzo de fusión y mantener limpio el historial?

Respuesta

4

Mi sugerencia personal. Esta se centra en tener un historial de compromisos directo, y fallar en las ramas "más específicas" (es mejor que desordene su sucursal local que la rama de características).

  1. Commit cambio a MyBranchLocal
  2. Rebase MyBranchLocal contra MyBranch
  3. Combinar MyBranch con MyBranchLocal (debe haber avance rápido) - MyBranch = Local
  4. Rebase MyBranch contra el Maestro
    1. (opcional) Combinar Maestro con MyBranch (también debe avanzar)
  5. Rebase MyBranchLocal contra MyBranch
4

He encontrado esta pregunta después del enlace a Linus email. De acuerdo con el correo electrónico, no debe volver a establecer la base una vez que haya publicado su historial en algún sitio público, ya que podría destruir el historial de otras personas. Entonces, rebase para MyBranchLocal está bien, pero para MyBranch (compartido con otros desarrolladores) no lo es.

Cuestiones relacionadas