Existe-t-il un moyen de rebaser un seul commit d'une branche vers une autre branche?
J'ai cette structure de branche:
-- -- -- -- -- (Master)
\
-- -- -- -- -- XX (Feature-branch)
Tout ce que je veux faire est de rebaser le dernier commit de Feature-branch
sur maître et restauration Feature-branch
un commit.
-- -- -- -- -- XX (Master)
\
-- -- -- -- -- (Feature-branch)
Comment je fais ça?
Vous pouvez sélectionner XX pour maîtriser.
git checkout master
git cherry-pick <commit ID of XX>
Et supprimez le dernier commit de la branche avec git reset.
git checkout Feature-branch
git reset --hard HEAD^
git rebase --onto master branch~1 branch
Ceci dit "rebase la plage des commits entre dernier-avant-branche et branche (c'est-à-dire XX commit) sur le bout de la branche principale"
Après cette opération, branch
tip est déplacé le commit XX
, vous voulez donc le réinitialiser avec
git checkout branch
git reset --hard branch@{1}^
Ce qui dit "réinitialise le branchement de la branche au commit avant son état précédent"
Donc, un choix de cerises est une solution plus simple ...
C'est assez simple à faire en réalité. La solution consiste à créer une base interactive et à "supprimer" tous les commits que vous ne souhaitez pas inclure dans la base.
git rebase -i <target_branch>
où target_branch
est la branche sur laquelle vous souhaitez vous baser
Ensuite, vous modifierez le fichier qui est ouvert et pick
les commits que vous voulez et drop
(ou d
pour faire court) tous les commits que vous ne voulez pas emporter. .
La réponse de @Charles est correcte. Quoi qu’il en soit, j’ai fini par l’utiliser si souvent, surtout pour rebaser une configuration spécifique sur un projet.
* a8f9182 (HEAD -> production) configuration de production | * daa18b7 configuration (pré) pré-production |/ | * d365f5f (local) configuration locale |/ * 27d2835 (dev) nouvelle fonctionnalité étonnante qui sauvera le monde * | 56d2467 (maître) ennuyeux état de l'art pour le projet | /
que je crée une nouvelle commande pour cela:
$ cat ~/bin/git-rebaseshot COMMIT = 1 $ DEST = $ {2: -HEAD} git rebase $ {COMMIT} ^ $ { COMMIT} --onto $ DEST
normalement, vous souhaitez compléter automatiquement les noms de branche pour cette commande, ajoutez-la à cette source (en ajoutant à .bashrc ou .profile):
_ git_rebaseshot () { __gitcomp_nl "$ (__ git_refs)" }
git autocomplete le recherchera
vous pouvez utiliser cette commande comme ceci:
# rebase config on prepro on actual HEAD
$ git rebaseshot prepro
# rebase config on local onto dev
$ git rebaseshot local dev
# rebase production config on master
$ git rebaseshot pro master
Lorsque vous divisez les caractéristiques correctement, les possibilités sont infinies.
* a8f9182 (HEAD -> postgres) config de BBDD * a8f9182 (local) config locale * a8f9182 (debug) config de niveau de journalisation * a8f9182 (dev) nouvelle fonctionnalité |
Je suppose que c’est ce que couette les gens aiment faire.
cette commande fonctionnera quand même avec tout ce que sha/ref vous fournira:
$ git rebaseshot <Feature branch> master
$ git rebaseshot <commit of XX> master