2010-11-30 21 views
1

Dire que j'ai actuellement ce qui suit dans git:Git: Convergences branches à un seul objet commit

master 
    O 
    | 
    o <-- commit objects on master branch 
    | 
    o -- O <-- new branch: featureX 
     | 
     o <-- commit objects on the featureX 
     | 
     o 

Alors j'ai commencé avec la branche master et après deux commits, je ramifié featureX.

maintenant, après 2 commits sur featureX, je veux converger avec master et continuer à travailler sur master du dernier commit sur featureX.

Cela signifie que je ne veux pas fusionner les fichiers entre master et featureX, mais le transfert de tous les commits effectuées sur featureX-master et continuer à travailler sur master de la dernière livraison qui a été fait sur featureX.

En gros, quelque chose comme ceci:

master 
    O 
    | 
    o <-- commit objects on master branch 
    | 
    o -- O <-- new branch: featureX 
     | 
     o <-- commit objects on the featureX 
     | 
    o -- o <-- move everything back to master 
    | 
    o <--continue working on master 

Quelles sont les étapes que je dois suivre pour cela?

Notez que je ne veux pas fusionner des fichiers ensemble ... il suffit d'écraser le contenu sur master. Vous pouvez également supposer qu'aucun travail n'a été fait sur master tout en travaillant sur featureX.

+0

L'élément clé qui explique la réponse que vous avez obtenue est que votre histoire d'art ascii, bien que non dessinée en tant que telle, est strictement linéaire. Les commits ne savent rien des branches, ils savent juste qui est leur parent. – Cascabel

Répondre

4

Si aucun autre travail a été fait sur le maître depuis la ramification pour featureX:

git checkout master 
git merge featureX 

Ce sera une « avance rapide » fusion qui devrait faire ce que vous voulez. Après ce qui précède, vous pouvez:

git branch -d featureX 

pour supprimer l'ancienne branche.

+2

'maître git checkout; git reset featureX' fonctionnerait également et ne ferait jamais de fusion. –

+0

Mais une fusion ne va-t-elle pas essayer de fusionner les fichiers ensemble? Je veux remplacer complètement les fichiers sur 'master' –

+3

@Andreas Grech: git doit seulement regarder les fichiers quand il y a des changements de fichiers sur deux branches divergentes. Comme il n'y a pas d'autres validations sur votre branche master, elle n'a pas divergé de l'endroit où était la branche de featureX. Il n'y a aucun changement à fusionner, donc pas de conflit, donc rien à faire au niveau du fichier. Comme le dit Greg, il s'agira d'une fusion rapide vers l'avant où votre branche maîtresse se déplace vers où se trouve maintenant featureX. Si vous avez un git relativement récent, vous pouvez - pour la tranquillité d'esprit - faire 'git merge --ff-only featureX' pour vous assurer que la fusion ne se produit que si elle est une avance rapide. –