Tengo una rama de función local de larga duración que estaba aplastando y reorganizando periódicamente con el maestro para mantenerla actualizada localmente.
Cuando se complete, quiero mi función en una sola confirmación aplastada encima del maestro.
Sin embargo, me preocupaba perder mi trabajo en caso de problemas de hardware, así que pasé esto a una nueva rama de funciones en github como medida de precaución. Desde que hice esto, no estoy realmente seguro de cómo mantener actualizada mi rama de funciones, ya que ya se ha enviado (preferiría no fusionar los cambios de la creación maestra de fusiones).
Soy el único desarrollador que usa esta rama de características. Así que no me preocupa reescribir el historial en una rama ya empujada. ¿Está bien enviar confirmaciones adicionales a mi rama de función remota, aplastar esa rama cuando haya terminado con la función y luego volver a basar esto en el maestro? ¿O arrojará algún error sobre las ramas divergentes ya que la rama ya era pública?
Alternativamente, estaba pensando que cuando mi trabajo estuviera completo, podría simplemente dejar de rastrear la rama de función remota (para que mi rama local ya no tenga una asociación con la rama remota), aplastar las confirmaciones en la rama de función local y luego reorganizar mi función. rama localmente en la parte superior del maestro.
¿Está bien enviar confirmaciones adicionales a mi rama de función remota, aplastar esa rama cuando haya terminado con la función y luego volver a basar esto en el maestro?
Sí, sí y sí. Como dijiste que no tienes miedo de reescribir la historia de esta rama, puedes hacer lo que quieras con ella.
¿O arrojará algún error sobre las ramas divergentes ya que la rama ya era pública?
Git no tiene una noción de ramas públicas y privadas. Puedes usar una rama pública o privada, Git no se quejará de eso.
Cuando rebase su rama encima de master
básicamente reproduces tus confirmaciones desde el punto en el que te ramificaste desde la línea de tiempo en master
. Si hubiera compromisos en master
después de ese punto, y realizó confirmaciones en su rama de características después de ese punto, entonces master
y tu rama se han separado. Cuando rebase, puede haber conflictos, dependiendo de los cambios en las dos ramas.
En resumen, puede hacer lo que quiera en sus ramas de funciones no documentadas y luego volver a basar encima de master
. Por supuesto, dependiendo de lo que hagas, el rebase puede ser más fácil (pocos o ningún conflicto) o más difícil (muchos conflictos). Probablemente sea bueno que cambies de base a menudo, de esa manera descubres los conflictos poco a poco, en lugar de muchos conflictos a la vez.
-
Encontré esta publicación que parecía indicar que se requiere el uso de la opción “forzar”: stackoverflow.com/questions/8939977/…
– sin bolsa de rejilla
26 de noviembre de 2016 a las 1:32
-
Parece que esa publicación se refiere a la rama de características, lo cual es aceptable. Me imagino que es equivalente a mi plan B de no rastrear la rama remota, aplastar y reorganizar localmente y luego crear una nueva rama. Simplemente usar -force en la rama de características parece más fácil.
– sin bolsa de rejilla
26 de noviembre de 2016 a las 1:43
-
Cuando reescribe el historial de una sucursal remota, el
--force
es necesario (y entiendes las consecuencias). Si lo desea, puede mantener muchas copias de seguridad, presionando nuevas ramas de funciones sin volver a escribir o eliminar las antiguas. El rastreo local y el no rastreo no tienen efecto sobre el aplastamiento y el rebasado. El propósito del seguimiento local es simplemente reducir la escritura o mejorar la visualización en ciertas operaciones, es bastante cosmético y no interfiere con las operaciones de control de versiones.– janos
26 de noviembre de 2016 a las 5:22
-
Parece que esto causaría problemas a todos los demás desarrolladores cuando extraigan ramas de su repositorio local.
– Andrew T. Finnell
11 de enero de 2019 a las 16:06