237 votes

Fusionner 2 branches ensemble dans GIT

Je viens juste de commencer à utiliser GIT et je pense que c'est merveilleux, mais je suis un peu confus quant à ce que l'on peut faire avec GIT. merge fait.

Disons que nous avons un projet en cours dans la branche "A".

Je rentre chez moi, apporte des modifications à cette branche et l'enregistre sous le nom de "B". Un autre programmeur apporte des modifications à "A" et l'enregistre sous "C".

Existe-t-il un moyen de fusionner les deux branches "B" et "C", puis de valider les modifications dans une nouvelle branche, disons "D" ?

Ou bien je ne comprends pas le sens de la "fusion" ?

0 votes

Il n'est pas nécessaire de "sauvegarder les modifications" dans une autre branche. travaillez sur un A et fusionnez ensuite ces différents A ensemble

0 votes

Je ne suis pas. A serait sur mon ordinateur local, dev1 aurait une copie de A sur son ordinateur, et dev2 a une copie de A sur son ordinateur. Les deux devs font des modifications, comment puis-je fusionner ces modifications ensemble ?

0 votes

Voir << kernel.org/pub/software/scm/git/docs/git-pull.html >Les développeurs doivent d'abord pousser/télécharger leur dépôt quelque part.

301voto

knittl Points 64110

merge est utilisé pour réunir deux (ou plusieurs) branches.

un petit exemple :

# on branch A:
# create new branch B
$ git checkout -b B
# hack hack
$ git commit -am "commit on branch B"

# create new branch C from A
$ git checkout -b C A
# hack hack
$ git commit -am "commit on branch C"

# go back to branch A
$ git checkout A
# hack hack
$ git commit -am "commit on branch A"

il y a donc maintenant trois branches distinctes (à savoir A, B et C) avec des responsables différents.

pour récupérer les changements de B et C dans A, il faut extraire A (ce qui a déjà été fait dans cet exemple) et ensuite utiliser la commande de fusion :

# create an octopus merge
$ git merge B C

votre historique ressemblera alors à quelque chose comme ceci :

…-o-o-x-------A
      |\     /|
      | B---/ |
       \     /
        C---/

si vous voulez fusionner au-delà des frontières entre référentiels et ordinateurs, jetez un coup d'œil à git pull par exemple, à partir du pc de la branche A (cet exemple créera deux nouveaux commits) :

# pull branch B
$ git pull ssh://host/… B
# pull branch C
$ git pull ssh://host/… C

0 votes

Cela signifie que les deux branches ont changé le même morceau de code. Corrigez les conflits, git add conflicting_files et ensuite git commit

0 votes

Supposons que le fichier de A contienne le mot "hello", que A le modifie en "HELLO" et que B le modifie en "Hello world". Quel serait le résultat de la fusion de ces fichiers ?

0 votes

Oups, je veux dire B l'a modifié et C l'a modifié.

168voto

Mohamed Shaban Points 1323

Si vous voulez fusionner les changements dans Sous-branche à MainBranch

  1. vous devriez être sur MainBranch git checkout MainBranch
  2. puis exécutez la commande de fusion git merge SubBranch

18 votes

@luckytaxi : Je suis d'accord, parfois moins c'est plus

0 votes

Puis-je annuler cela ?

1 votes

@Yohanelly oui, vous pouvez réinitialiser git head à n'importe quel commit.

5voto

kisHoR Points 176

Cas : Si vous avez besoin de ignore le commit de fusion créé par défaut Suivez les étapes suivantes.

Disons qu'une nouvelle branche de fonctionnalité est extraite de master qui a déjà 2 commits,

  • "Ajouté A", "Ajouté B"

Checkout a new feature_branch

  • "Ajouté C" , "Ajouté D"

La branche Feature ajoute ensuite deux commits-->

  • "Ajouté E", "Ajouté F"

enter image description here

Maintenant, si vous voulez fusionner les changements de feature_branch à master, Faites git merge feature_branch assis sur le maître.

Cela ajoutera tous les commits dans la branche master (4 dans master + 2 dans feature_branch = total 6) + un commit de fusion supplémentaire du type 'Merge branch 'feature_branch' ' comme le maître est divergent .

Si vous avez vraiment besoin d'ignorer ces commits (ceux faits dans FB) et d'ajouter l'ensemble des changements faits dans feature_branch comme un seul commit comme 'Integrated feature branch changes into master' , Run git merge feature_merge --no-commit .

Avec --no-commit, il effectue la fusion et s'arrête juste avant de créer un commit de fusion, Nous aurons toutes les modifications ajoutées dans la branche feature maintenant dans master et aurons une chance de créer un nouveau commit comme le nôtre.

Lisez ici pour en savoir plus : https://git-scm.com/docs/git-merge

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X