Git merge nos permite realizar un avance rápido y no una fusión de avance rápido. ¿Alguna idea de cuándo usar la fusión de avance rápido y cuándo no usar la fusión de avance rápido?Git avance rápido VS sin fusión de avance rápido
Respuesta
La opción --no-ff
es útil cuando desea tener una noción clara de su rama de características. Por lo tanto, aunque mientras tanto no se hayan realizado confirmaciones, es posible FF; aún desea que a veces cada confirmación en la línea principal corresponda a una característica. Así que trata una rama de características con un grupo de confirmaciones como una sola unidad, y las combina como una sola unidad. Está claro de su historial cuando aparece la fusión de sucursales con --no-ff
.
Si no te importa eso, probablemente puedas salir con FF siempre que sea posible. Por lo tanto, tendrá más sensación de flujo de trabajo similar a svn.
Por ejemplo, el autor de este article piensa que --no-ff
opción debe ser defecto y su razonamiento es similar a la que he descrito:
Consideremos la situación en la que una serie de confirmaciones de menor importancia en la rama "característica" colectivamente crear una nueva función: si acaba de hacer "git merge feature_branch" sin --no-ff
, "es imposible ver en el historial de Git qué objetos de confirmación juntos han implementado una característica: debería leer manualmente todos los mensajes de registro. Revertir una característica completa (es decir, un grupo de confirmaciones) es un verdadero dolor de cabeza [si --no-ff
no se usa], mientras que se hace fácilmente si se usó la bandera --no-ff
[porque es j ust one commit]. "
Y los avances rápidos son geniales para cuando tienes una colección de ramas estrechamente relacionadas que de vez en cuando quieres mover juntas. No todas las fusiones son eventos históricos reales. – Cascabel
¿Por qué mantener varias ramas entonces? Si están relacionados, ¿por qué no hacer todo en una sola rama? –
Muy relacionado no significa idéntico. Además, el flujo de trabajo no siempre es limpio. No siempre haces los commits que crees que vas a hacer, no siempre sales desde el mejor lugar. Tal vez empiezas un par de funciones desde un solo lugar, comienzas a trabajar en una de ellas, te das cuenta de que es genérica y adelanta la otra antes de desviarse. – Cascabel
Es posible también que uno puede desear tener ramas de características personalizadas donde el código se acaba de colocar al final del día. Eso permite seguir el desarrollo con más detalles.
No quisiera contaminar el desarrollo maestro con código que no funciona, haciendo así --no-ff puede ser lo que se está buscando.
Como nota al margen, puede que no sea necesario asignar código de trabajo en una bifurcación personalizada, ya que el historial se puede volver a escribir git rebase -i
y forzar en el servidor siempre que nadie más esté trabajando en esa misma bifurcación.
Puedo dar un ejemplo visto comúnmente en el proyecto.
Aquí, --no-ff
(es decir, true merge) crea una nueva confirmación con múltiples padres y proporciona un mejor seguimiento del historial. De lo contrario, --ff
(es decir, fast-forward merge) es por defecto.
$ git checkout master
$ git checkout -b newFeature
$ ...
$ git commit -m 'work from day 1'
$ ...
$ git commit -m 'work from day 2'
$ ...
$ git commit -m 'finish the feature'
$ git checkout master
$ git merge --no-ff newFeature -m 'add new feature'
$ git log
// something like below
commit 'add new feature'
commit 'finish the feature' // => commit created at merge with proper message
commit 'work from day 2'
commit 'work from day 1'
$ gitk // => see details with graph
$ git checkout -b anotherFeature // => create a new branch (*)
$ ...
$ git commit -m 'work from day 3'
$ ...
$ git commit -m 'work from day 4'
$ ...
$ git commit -m 'finish another feature'
$ git checkout master
$ git merge anotherFeature // --ff is by default, message will be ignored
$ git log
// something like below
commit 'work from day 4'
commit 'work from day 3'
commit 'add new feature'
commit 'finish the feature'
commit ...
$ gitk // => see details with graph
(*) Tenga en cuenta que aquí si la rama newFeature
se reutiliza, en lugar de crear una nueva rama, GIT tendrá que realizar una combinación --no-ff
de todos modos. Esto significa que la fusión rápida no es elegible.
- 1. EGit: ¿Cómo prevenir la fusión de avance rápido?
- 2. Avance rápido de fundición dinámica
- 3. git pull --rebase upstream & git push origen rechaza avance rápido?
- 4. git rebase y git push: avance rápido, ¿por qué usar?
- 5. ¿Cómo verifico el registro de git para una combinación de "avance rápido"?
- 6. git pull dice actualizado, pero git push rechaza el avance no rápido
- 7. El repositorio de Source Forge muestra el error "denegando el refs/heads/master sin avance rápido"
- 8. Implementación en heroku con git pone cada vez rechazados por el avance rápido de
- 9. Se rechazaron las actualizaciones Git de avance rápido Fusionar los cambios remotos
- 10. Cambiar el nombre del autor de las confirmaciones anteriores: se rechazan las solicitudes de avance rápido
- 11. ¿Cómo evitar que la combinación vuelva a la estrategia de fusión normal cuando no es posible una fusión de avance rápido?
- 12. git rebase maestro y luego push branch de origen da como resultado un error de avance rápido
- 13. ¿Cómo puedo saber los usuarios pulsan los botones de avance rápido y rebobinado rápido en los controles de reproducción en el iPhone
- 14. Promedio rápido sin división
- 15. llanta de avance de gwt simple
- 16. Struts 1.3 parámetro de avance de acción
- 17. Eclipse EGIT: todo comprometido, tirado, fusionado, marcado como fusionado, todavía en proceso de inserción, me "rechazan", no me refiero al avance rápido, ¿qué me estoy perdiendo?
- 18. Kohana 3.2 'avance' ORM se une
- 19. jQuery Pregunta De la Entrevista (desde principiantes hasta Avance)
- 20. declaración de avance de una estructura en C?
- 21. MVC Preserve retorno de carro - avance de línea en html
- 22. Retorno de carro, avance de línea y nueva línea
- 23. estilo iTunes U descarga// parada botón de avance/juego
- 24. Unity3D C# calcule el avance correcto después de la rotación
- 25. es una matriz estática un rango de avance?
- 26. ¿Algún avance en "JavaScript Micro-Templating" de John Resig?
- 27. Avance mientras se completa el informe de jaspe
- 28. rails: obtener un avance/extracto de un artículo
- 29. Crear un avance de noticias en Rails 3
- 30. Cómo insertar un avance de línea con PDFBox drawString
¿Ayudaría http://stackoverflow.com/questions/2850369/why-uses-git-fast-forward-merging-per-default/2850413#2850413? – VonC
Creo que se puede encontrar otra perspectiva realmente buena aquí http://endoflineblog.com/gitflow-considered-harmful –
¿La misma pregunta? http://stackoverflow.com/questions/9069061/ –