La situation:
- le maître est à X
- quickfix1 est à X + 2 commits
Tel que:
o-o-X (master HEAD)
\
q1a--q1b (quickfix1 HEAD)
Ensuite, j'ai commencé à travailler sur quickfix2, mais par accident, j'ai pris quickfix1 comme branche source à copier, pas le maître. Maintenant, quickfix2 est à X + 2 validations + 2 validations pertinentes.
o-o-X (master HEAD)
\
q1a--q1b (quickfix1 HEAD)
\
q2a--q2b (quickfix2 HEAD)
Maintenant, je veux avoir une branche avec quickfix2, mais sans les 2 commits qui appartiennent à quickfix1.
q2a'--q2b' (quickfix2 HEAD)
/
o-o-X (master HEAD)
\
q1a--q1b (quickfix1 HEAD)
J'ai essayé de créer un correctif à partir d'une certaine révision dans quickfix2, mais le correctif ne conserve pas l'historique des validations. Existe-t-il un moyen de sauvegarder mon historique de commit, mais d'avoir une branche sans changements dans quickfix1?
quickfix1
. (Notez également la différence dans les réponses.)Réponses:
Il s'agit d'un cas classique de
rebase --onto
:Vous devriez donc passer de
à:
Il est préférable de le faire sur un arbre de travail propre.
Voir
git config --global rebase.autostash true
, surtout après Git 2.10 .la source
q2a
ONTOX
et sélectionnez Rebase 2 commits à partir des options de la boîte de dialogue se produire.git rebase --onto
.rebase.autostash
configuration: cela évitera toute perte de travail en cours dans l'arborescence de travail lors d'un rebase.Vous pouvez utiliser
git cherry-pick
pour sélectionner simplement le commit sur lequel vous souhaitez copier.La meilleure façon est probablement de créer la branche à partir du maître, puis dans cette branche, utilisez
git cherry-pick
les 2 validations de quickfix2 que vous souhaitez.la source
La chose la plus simple que vous puissiez faire est de choisir une gamme. Il fait la même chose que le
rebase --onto
mais est plus facile pour les yeux :)la source
rebase --onto
conserve- t-il également les modifications d'origine?rebase
etcherry-pick
vous donner de nouvelles clés SHA. En effet, chaque commit est un instantané unique du référentiel.cherry-pick
une gamme comme dans cette réponse et ça a confondu mon repo. J'ai dû faire descherry-pick
s pour chaque commit. (Et peut-être que cela va sans dire, mais au cas où quelqu'un aurait du mal, vous devez le fairecherry-pick
dans l'ordre chronologique dans lequel vos commits ont été appliqués.)git checkout
est crucial ici. quelle est votre TÊTE :)?Je crois que c'est:
la source
cherry-pick
fonctionne avec les hachages de validation, donc, si vous voulez simplement récupérer une validation de quelque part et la placer ailleurs, c'est la voie à suivre. Assurez-vous simplement de fairecheckout <branch>
d'abord la bonne branche.Autres commandes plus utiles ici avec explication: Git Guide
la source