¿Está bien aplastar los sets de cambios de una request de extracción abierta?

Estoy en la siguiente situación:

  1. Cometí algunos parches a una twig de desarrollo
  2. Empujo la twig en stash o github o bitbucket
  3. Abro una request de fusión de dev para master
  4. Presiono algunos parches nuevos que solucionan los problemas informados por los revisores

Resulta que algunos de los parches se pueden aplastar con los anteriores, para boost la claridad y la consistencia.

¿Está bien hacerlo (y luego forzar el envío a la twig de desarrollo remoto)? ¿Hay algunas situaciones en las que esto podría romper algo en la experiencia de request de fusión?

EDITAR

Gracias por tus respuestas.

De hecho, soy el propietario del repository de un proyecto, no un usuario real que crea una request de fusión. Entiendo completamente los mecanismos de fusión y rebase de git, así que no hay necesidad de explicar los aspectos internos de git.

La pregunta es más: como revisor, ¿le pedirías a un remitente que elimine algunos de sus parches cuando tenga sentido? En su experiencia, desactiva o rompe algunas oportunidades que ofrecen requestes de extracción.

Una vez que se han enviado las confirmaciones, volver a escribir el historial (que realmente está creando un nuevo historial) va a causar problemas. Después de que haya modificado sus cambios, su repository se verá así.

A - B - C - D - E - F [origin/master] [master] \ 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 [dev] [origin/dev] 

Digamos que usted decide que 6 pueden ser aplastados en 3 y 7 pueden ser aplastados en 4. Usted hace una rebase y termina con esto …

 A - B - C - D - E - F [origin/master] [master] \ 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 [origin/dev] \ 3b - 4b - 5b - 8b [dev] 

Aunque 5 y 8 no se cambiaron directamente, se deben volver a escribir porque sus padres cambiaron y terminan con nuevas identificaciones. Tu twig dev ha divergido con la del remoto. Si empuja, tiene que forzarlo y soplar 3, 4, 5, 6, 7 y 8. Esto causa problemas a todos los demás.

Cualquiera que haya sacado tu twig de desarrollo ahora recibirá un error cuando intente empujar o tirar. Tienen que pull --force para actualizar. Si han trabajado en la parte superior de tu sucursal, se complica.

Todo lo que se refiera a confirmaciones 3 – 8 (revisiones, comentarios, inputs de logging, etc.) ahora indicará el lugar equivocado.

Sin embargo, debería fusionar bien.

Algunos sistemas de request de extracción lidian con esto mejor que otros. La última vez que miré, Github presentará tus confirmaciones re-basadas como nuevas confirmaciones y puede ser un poco confuso. Debido a esto, le sugiero que pregunte al proyecto si quieren que limpie su sucursal o simplemente lo dejen tal como está.

  1. A los revisores en general les gusta observar las pequeñas diferencias entre las confirmaciones que realiza en function de sus comentarios. Si squash se compromete, entonces pueden confundirse ya que tienen que revisar muchos cambios ahora.

  2. Por otro lado, si no aplasta las confirmaciones, habrá momentos en los que podría necesitar volver a basar su twig en otra twig. Y como no tienes commit aplastado, podrías ver conflictos de fusión por cada commit que sea doloroso.

No, absolutamente no 1 .

Tan pronto como haya realizado cambios para que otras personas los revisen, usted habrá publicado su historial. Y rara vez desea editar el historial publicado. Solo debe aplastar y volver a establecer sus propios compromisos personales que no haya compartido con nadie.

Puedo entender el deseo de mostrar una historia "limpia, perfecta". Sería bueno enviar una historia prístina al mundo sin errores en ninguno de sus compromisos. ¡Pero es muy tarde! Cometiste algunos errores y otros desarrolladores los encontraron. Entonces quiere ocultar sus errores reescribiendo el historial. En este mundo, tu historial puede ser limpio o puede ser preciso, pero no puede ser al mismo time.

Sí, es muy tentador reescribir la historia porque estás avergonzado de ella.

Si no aplastas,

  • Los revisores pueden ver en la historia exactamente cómo ha abordado sus inquietudes.

  • El historial se puede utilizar más adelante como reference, si alguien plantea inquietudes similares con otras piezas de código. ¡La historia es una herramienta valiosa para aprender sobre el código!

  • Los revisores no tienen que revisar su request de extracción desde cero, porque ya revisaron una versión anterior.

  • ¡Eres digno de confianza! No estás escondiendo cosas.

  • Si alguien ha retirado para revisar sus cambios, no tendrán problemas la próxima vez que lo hagan.

Si haces squash,

  • Te sientes como el desarrollador perfecto que nunca comete un error. ¡Qué apuro de ego!

¡No hay historia publicada aplastante!

1 : en algunos casos, si realizó algunos cambios accidentales en el formatting / espacio en blanco, o accidentalmente compiló productos de compilation, o algo que nunca debería haber estado en el historial, continúe y reescriba el historial (para que no se rompa) git blame ). Así que no tome la palabra "absolutamente" al pie de la letra.