Vous devriez vraiment avoir un workflow qui vous permet de tout faire en fusionnant:
- x - x - x (v2) - x - x - x (v2.1)
\
x - x - x (wss)
Donc, tout ce que vous avez à faire est git checkout v2.1
et git merge wss
. Si, pour une raison quelconque, vous ne pouvez vraiment pas le faire et que vous ne pouvez pas utiliser git rebase pour déplacer votre branche wss au bon endroit, la commande pour récupérer un seul commit quelque part et l'appliquer ailleurs est git cherry-pick . Vérifiez simplement la branche sur laquelle vous souhaitez l'appliquer et exécutez git cherry-pick <SHA of commit to cherry-pick>
.
Certaines des façons dont le rebasage peut vous sauver:
Si votre histoire ressemble à ceci:
- x - x - x (v2) - x - x - x (v2.1)
\
x - x - x (v2-only) - x - x - x (wss)
Vous pouvez utiliser git rebase --onto v2 v2-only wss
pour déplacer wss directement sur la v2:
- x - x - x (v2) - x - x - x (v2.1)
|\
| x - x - x (v2-only)
\
x - x - x (wss)
Ensuite, vous pouvez fusionner! Si vous ne pouvez vraiment, vraiment, vraiment pas arriver au point où vous pouvez fusionner, vous pouvez toujours utiliser rebase pour effectuer efficacement plusieurs sélections à la fois:
# wss-starting-point is the SHA1/branch immediately before the first commit to rebase
git branch wss-to-rebase wss
git rebase --onto v2.1 wss-starting-point wss-to-rebase
git checkout v2.1
git merge wss-to-rebase
Remarque: la raison pour laquelle cela nécessite un travail supplémentaire est de créer des validations en double dans votre référentiel. Ce n'est pas vraiment une bonne chose - le but de la branchement et de la fusion faciles est de pouvoir tout faire en faisant des commit un seul endroit et en les fusionnant là où ils sont nécessaires. Les commits en double signifient une intention de ne jamais fusionner ces deux branches (si vous décidez de le faire plus tard, vous aurez des conflits).