Entendendo git merges

Existem dois tipos de mesclagem …

  • FastForward merge
  • Mesclagem não FastForward.

Afinal, o que isso quer dizer?!

FF é o padrão, entretanto git usará um não-FF se o FF não for possível.

o-o-o-o-o master

-o-o-o-o-o-o feature-x

Com o exemplo acima … uma vez que feature-x contém tudo que o master obteve … mesclando o feature-x no master, FastForward é possível (portanto, é o padrão).

  • git merge feature-x ou
  • git merge feature-x --ff-only

vai:

o-o-o-o-o

-o-o-o-o-o-o feature-x | master

git merge feature-x --no-ff vai:

o-o-o-o-o--------------o master
/
-o-o-o-o-o-o feature-x

Se o mestre foi atualizado …

o-o-o-o-o-o-o-o-o master

-o-o-o-o-o-o feature-x

Então, uma mesclagem não pode ser FastForward.

  • git merge feature-x ou
  • git merge feature-x --no-ff

vai:

o-o-o-o-o-o-o-o-o------o master
/
-o-o-o-o-o-o feature-x

git merge feature-x --ff-only irá gerar um erro porque não pode usar uma fusão FastForward.

Nota

git merge feature-x --ff-onlyé o mesmo que, git reset feature-x --hardno entanto, a fusão geraria um erro se o feature-x não contivesse tudo que seu branch atual tem … enquanto o reset você pode perder commits.