Digamos que temos a seguinte situação no Git:
Um repositório criado:
mkdir GitTest2 cd GitTest2 git init
Algumas modificações no mestre ocorrem e são confirmadas:
echo "On Master" > file git commit -a -m "Initial commit"
O Feature1 ramificou o mestre e algum trabalho é feito:
git branch feature1 git checkout feature1 echo "Feature1" > featureFile git commit -a -m "Commit for feature1"
Enquanto isso, um bug é descoberto no código mestre e um ramo de hotfix é estabelecido:
git checkout master git branch hotfix1 git checkout hotfix1
O bug é corrigido no ramo de hotfix e mesclado de volta ao mestre (talvez após uma solicitação de recepção / revisão de código):
echo "Bugfix" > bugfixFile git commit -a -m "Bugfix Commit" git checkout master git merge --no-ff hotfix1
O desenvolvimento do recurso1 continua:
git checkout feature1
Digamos que eu precise do hotfix no ramo de recursos, talvez porque o bug também ocorra lá. Como conseguir isso sem duplicar as confirmações no meu ramo de recursos?
Desejo impedir a obtenção de duas novas confirmações no meu ramo de recurso que não têm relação com a implementação do recurso. Isso me parece especialmente importante se eu usar solicitações pull: todas essas confirmações também serão incluídas na solicitação pull e precisarão ser revisadas, embora isso já tenha sido feito (já que o hotfix já está no mestre).
Não consigo fazer um git merge master --ff-only
: "fatal: não é possível avançar, abortar.", Mas não tenho certeza se isso me ajudou.
git rebase
parece magia negra para mim ....
git branch feature1
e git checkout feature1
poderiam ser combinados em git checkout -b feature1
e 4. poderia ser inteiramente reduzido agit checkout -b hotfix1 master
feature1
for completamente local, dê uma olhadagit rebase
.