2011-09-12 4 views
0

J'ai une hiérarchie de validations dans mon référentiel local et je souhaite revenir à un ancien commit et appliquer certaines des modifications de la validation HEAD. Comment puis-je faire cela?Fusion manuelle de différentes validations dans Git

Envisagez le scénario suivant. Je les commits suivants dans mon repo:

Commit 6 (HEAD)
Commit 5
Commit 4
Commit 3
Commit 2
Commit 1

réinitialiser à engager 2 comme ci-dessous

git reset --hard commit2 

Maintenant, je veux, par exemple, de fusionner toutes les modifications appliquées jusqu'à 6 mais sans engager ceux COMMIT 3 et certains de ceux COMMIT 5.

Si je fais ceci:

git merge commit6 

I va finir par avoir tout dans la tête sans la sélectivité que je suis après.

Comment puis-je atteindre ma cible?

Vive AF

+0

Thanls ur réponses. suis en train d'essayer de rebase mais maintenant je suis coincé dans le Terminal! Je suis coller dans un mode de saisie de texte dans le terminal qui a quelques options de commande dans le texte et noop! Je veux sortir mais je ne sais pas comment. essayé tout mais ne fonctionne pas.En outre, je n'ai pas eu une invite de l'éditeur interactif – Abolfoooud

+0

ok, j'ai publié que mon éditeur était en fait VIM qui était ouvert dans le terminal (sur Mac). Je suis familier avec c'est pourquoi j'étais confus. Géré pour obtenir le fichier enregistré et maintenant en train d'effectuer la fusion. – Abolfoooud

Répondre

2

Dans ce cas, vous pouvez utiliser rebasage

Vous n « t besoin de réinitialiser pour commettre 2

Dans votre tête, le type

git rebase -i HEAD~6 

Et l'éditeur interactif sera invité.

Vous pouvez manipuler à quoi ressemblera votre commit par ex. Supprimer la ligne 3 commit

Enregistrer ce

alors votre résultat cible est ce que vous cherchez

+0

Merci pour vos réponses. suis en train d'essayer de rebase mais maintenant je suis coincé dans le Terminal! Je suis coller dans un mode d'entrée de texte dans le terminal qui a quelques options de commande dans le texte et c'est tout! Je veux sortir mais je ne sais pas comment. essayé tout mais ne fonctionne pas. D'ailleurs je n'ai pas eu une invite de l'éditeur interactif – Abolfoooud

+0

J'arrive maintenant. je peux combiner les commits et les supprimer. Mais comment puis-je faire une modification aux modifications que j'ai faites dans un commit? Si je fais "edit" dans le fichier de rebasage interactif j'arrive à un état où je édite le message o le commit mais pas les changements que j'ai faits. Comment puis-je procéder à partir de là? – Abolfoooud

+0

@Abolfoooud: autant que je sache, vous devez supprimer et recréer ce commit. Vous pouvez réorganiser votre commit souhaité à la tête. Ensuite, vous réinitialisez --hard HEAD^pour faire les changements à nouveau. –

1

Vous pouvez créer une nouvelle branche avec seulement les commits sélectionnés.

git checkout branch 
git checkout -b new_branch 

# remove unwanted commits 
git rebase -i HEAD~6 

# continue with merge 

Ou vous pouvez toujours choisir commits.

+0

Vous voulez probablement dire 'git rebase -i commit1' ou quelque chose de similaire .... –

+0

@Mark Vous avez raison. –

3

Vous pouvez soit cherrypick que vous le souhaitez.

Ou utilisez rebasage interactif si vous souhaitez modifier l'histoire en place (ne devrait jamais être fait si vous avez déjà upstreamed vos modifications):

git rebase -i HEAD~6 
# in editor that popped up remove line that corresponds to Commit3, save and quit 
Questions connexes