Git, fusionando twigs git

No puedo entender por qué mi combinación está actualizando una confirmación … parece que está actualizando la confirmación Agregar color, no fusionando el maestro con monedas. Sublime no aparece cuando bash fusionar estas twigs. ¿Alguien puede ayudarme? Además, cuando escribo git commit tengo:

En branch master Su branch está por delante de 'origin / master' por 2 commits. (use "git push" para publicar sus confirmaciones locales) nada que confirmar, trabajando en tree limpio

enter image description here

No estoy seguro de cuál es su pregunta, pero creo que están pasando dos cosas que tal vez no entienda completamente.

Primero, no creo que las git merge master coins hagan lo que crees que hace.

git merge master coins no dice fusionar master en coins . Dice fusionar master y coins en la twig actualmente desprotegida. Eso es porque las master coins son una list de twigs para fusionar en la twig actual. De los documentos …

[git merge] incorpora cambios de commits nombrados (desde el momento en que sus historiales divergieron de la twig actual) en la twig actual .

Si master está desprotegido, entonces combina monedas en master. Si se extraen las coins , se fusiona el master en coins . Si se revisa algo más, se obtiene lo que se llama una "fusión de pulpo" y las tres, el master , las coins y la twig actual se fusionan en lo que probablemente sea un gran desastre.

Tal como están las cosas, te fusionaste con el master check out, así que las git merge master coins son lo mismo que las git merge coins . Combinaste coins en master que es, creo, lo que querías, pero podría haber ido mal.

Entonces no use esa syntax; puede meterlo en problemas, y es difícil saber qué sucedió realmente mirando el historial de commands. En su lugar, use git checkout branch-to-merge-into; git merge branch-to-merge-from git checkout branch-to-merge-into; git merge branch-to-merge-from . Así que si quieres fusionar monedas en master, git checkout master; git merge coins git checkout master; git merge coins .


El próximo problema es acerca de la fusión rápida. Esto es algo que hace Git cuando no hay necesidad de una fusión, cuando las twigs no han divergido. Por ejemplo, digamos que tuviste esto …

 A - B - C - D - G [master] \ E - F - H [feature] 

Como el master tiene cambios que no son comunes con la feature (D y G), debe fusionarse. Entonces git checkout master; git merge feature git checkout master; git merge feature resultados de la git checkout master; git merge feature en una nueva fusión se confirman.

 A - B - C - D - G - I [master] \ / E - F - H [feature] 

Pero si no hubo nuevas confirmaciones en el master , usted tiene esto (el master está apuntando a C).

  [master] A - B - C - E - F - H [feature] 

se dice que la feature no divergió de la master . No hay necesidad de un compromiso de fusión, por lo que Git no se molesta con uno. Cuando haces git checkout master; git merge feature git checkout master; git merge feature simplemente mueve el master a H.

  [master] A - B - C - E - F - H [feature] 

Git puede hacer esto porque las "twigs" son realmente solo tags que apuntan a una confirmación. Ahora el master y la feature apuntan a la misma confirmación.


Recomiendo evitar los avances mientras fusionas twigs de características porque pierde información arqueológica importante. Alguien que mira el repository más tarde no puede decir que E, F y H fueron hechos como una sola twig.

Recomiendo fusionar siempre twigs de características con git merge --no-ff . Esto obliga a Git a realizar un commit de fusión y alguien que intente descifrar tu código en el futuro puede saber que E, F y H son parte de un todo mayor.

 A - B - C --------- I [master] \ / E - F - H [feature] 

El compromiso de fusión, I, también le da un lugar para describir la sucursal y agrega cosas como un enlace al problema / error / ticket que describe para qué era la sucursal.