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
ougit 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
ougit 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 --hard
no 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.