Diciamo che abbiamo la seguente situazione in Git:
Un repository creato:
mkdir GitTest2 cd GitTest2 git initAlcune modifiche nel master avvengono e si impegnano:
echo "On Master" > file git commit -a -m "Initial commit"Feature1 branched master e alcuni lavori sono stati eseguiti:
git branch feature1 git checkout feature1 echo "Feature1" > featureFile git commit -a -m "Commit for feature1"Nel frattempo, viene rilevato un bug nel codice master e viene stabilito un ramo hotfix:
git checkout master git branch hotfix1 git checkout hotfix1Il bug viene corretto nel ramo hotfix e riunito nuovamente nel master (forse dopo una richiesta pull / revisione del codice):
echo "Bugfix" > bugfixFile git commit -a -m "Bugfix Commit" git checkout master git merge --no-ff hotfix1Lo sviluppo su feature1 continua:
git checkout feature1
Supponiamo che abbia bisogno dell'aggiornamento rapido nel mio ramo delle funzionalità, forse perché il bug si verifica anche lì. Come posso raggiungere questo obiettivo senza duplicare gli commit nel ramo delle mie funzioni?
Voglio impedire di ottenere due nuovi commit sul mio ramo di funzionalità che non hanno alcuna relazione con l'implementazione della funzione. Ciò sembra particolarmente importante per me se utilizzo le richieste pull: tutti questi commit saranno inclusi anche nella richiesta pull e dovranno essere rivisti anche se ciò è già stato fatto (poiché l'aggiornamento rapido è già presente nel master).
Non posso fare un git merge master --ff-only: "fatale: impossibile avanzare velocemente, abortire", ma non sono sicuro che questo mi abbia aiutato.
git rebasesembra una magia nera ...
git branch feature1e git checkout feature1potrebbero essere combinati in git checkout -b feature1e 4. potrebbero essere completamente ridotti agit checkout -b hotfix1 master
feature1è completamente locale, dai un'occhiata agit rebase.