Ma demande d'extraction a été fusionnée, que faire ensuite?

112

J'ai récemment participé à un projet de GitHub. J'ai fait ce qui suit:

Forked le référentiel d'origine, cloné sur ma machine locale, créé une branche pour corriger le bogue existant, correction du bogue dans cette branche, poussé cette branche vers mon référentiel, envoyer une pull request à l'auteur du référentiel pour fusionner ma branche de correctif avec sa branche principale.

C'était la première fois que je m'engageais sur le code d'un autre donc je ne sais pas quoi faire. Maintenant, ma demande d'extraction a été fusionnée avec le dépôt / projet d'origine par l'auteur.

Que devrais-je faire ensuite? Dois-je supprimer la branche? Dois-je fusionner la succursale? Rien d'autre?


Information additionnelle:

Le projet d'origine a une seule branche.

J'ai également un ensemble en amont pour obtenir les dernières mises à jour du dépôt d'origine. (Je l'ai fait comme ça) :

git remote add upstream https://path/to/original/repo.git

Et je reçois des mises à jour comme celle-ci:

git fetch upstream
Santosh Kumar
la source
12
Ghehe, vous n'êtes pas le seul à lutter: Vidéo Youtube :)
Anne

Réponses:

65

Ce qu'il faut faire ensuite est: continuer à apporter de nouvelles fonctionnalités ou à corriger d'autres bogues dans leurs propres branches dédiées (poussées uniquement à votre fourchette).

Cela signifie que votre fourche reste, mais les branches à l'intérieur de votre fourche peuvent aller et venir.

Vous pouvez également supprimer le fork si vous ne prévoyez pas de contribuer davantage, mais cela supprimera l'entrée correspondante dans les «Référentiels auxquels vous contribuez» .

Il est plus facile de:

  • supprimez votre fixbranche (en fait, elle est maintenant supprimée pour vous ) sur votre fork (et dans votre repo local cloné: voir " Supprimer une branche Git à la fois localement et à distance ")
  • git pull upstream master(si masterétait la branche dans laquelle votre correctif a été intégré: la fusion sera une avance rapide): aucun rebase n'est nécessaire à ce stade.
  • recréez une branche de correctif au-dessus de votre locale mise à jour master(maintenant avec la dernière version de upstream master).

Cependant, n'oubliez jamais une étape avant de soumettre toute future pull request:

rebase d'abord votre branche actuelle ( fix) depuis la branche de destination en amont

( upstreamétant le dépôt d'origine que vous avez forké: voir " Quelle est la différence entre l'origine et l'amont dans github ")

Avant de renvoyer quoi que ce soit au référentiel d'origine ("en amont"), vous devez vous assurer que votre travail est basé sur le dernier en date dudit référentiel d'origine (sinon la demande d'extraction n'entraînera pas une fusion rapide une fois appliquée retour sur upstreamrepo).
Voir, par exemple, " Workflow pour gérer les demandes d'extraction sur les dépôts partagés dans github ".

En d'autres termes, upstreampeut évoluer (avoir de nouveaux commits) pendant que vous êtes occupé à réparer des choses. Vous devez rejouer vos correctifs en plus de ce dernier travail en amont pour vous assurer que vos commits sont toujours compatibles avec le dernier des upstream.


L' OP Santosh Kumar demande dans les commentaires :

J'ai tiré et fusionné de upstreamà maître, et maintenant?

Si vous n'avez pas apporté de nouveaux correctifs depuis votre récente pull request, voir ci-dessus (supprimez et recréez une nouvelle branche fixen plus de votremaster ).

Si vous avez fait plus de travail depuis votre pull request, je ne fusionnerais pas upstreamsi je voulais faire une nouvelle pull request: je tirerais et rebaserais :

git pull --rebase upstream master

De cette façon, tous mes nouveaux travaux locaux sont rejoués en plus des derniers upstream master commits (récupérés dans mon dépôt local), en supposant quemaster c'est la branche cible qui intégrera ma future pull request.

Ensuite, je peux pousser mon travail local vers ' origin', qui est mon fork sur GitHub de upstream.
Et à partir de mon fork sur GitHub, je peux faire une pull request en toute sécurité, sachant que cela ne fera qu'ajouter de nouveaux commits àupstream sans avoir besoin de résolution de fusion: la fusion de ces nouveaux commits dans le upstreamdépôt signifiera une simple fusion rapide.


UNE git pull --rebase sans spécifier la branche au-dessus de laquelle vous souhaitez rebaser votre branche (actuellement extraite) fixne fonctionnerait pas:

Cela ( git pull --rebase) dit:

You asked to pull from the remote '`upstream`', but did not specify a branch. 

Dois-je enfin ajouter un master? Et qu'est-ce que cela va faire?fix branche?

Oui, vous pouvez spécifier la branche qui sera la cible de la pull request, par exemple ' master'.
Cela ne supprimera pas votre fixbranche, mais la rejouera en plus de la masterrécupération en amont dans votre dépôt.

VonC
la source
Pouvez-vous expliquer le rebase de la partie en amont ?
Santosh Kumar
@SantoshKumar, vous devez rebaser vos commits locaux au-dessus du dépôt d'origine (ici référencé en amont) avant de pousser à votre fork et de faire votre pull request: voir stackoverflow.com/questions/9257533/…
VonC
Oui, je sais que je pose une question basique . J'ai tiré et fusionné de l'amont au maître, et maintenant?
Santosh Kumar
@SantoshKumar c'est une bonne question. J'ai modifié la réponse pour y remédier. Cherchez "L'OP Santosh Kumar demande dans les commentaires: ..."
VonC
Cela dit: You asked to pull from the remote 'upstream', but did not specify a branch.dois-je enfin ajouter master? Et qu'est-ce que cela va faire?, Va-t-il supprimer ma branche de correction ?
Santosh Kumar
18

Tout d'abord, félicitations pour votre première contribution à un projet sur Github.

Le flux de travail habituel de Github consiste à créer une nouvelle branche pour chaque problème que vous résolvez. De cette façon, le responsable du référentiel principal peut décider laquelle de vos solutions fusionner et laquelle rejeter. Une fois qu'une branche a été fusionnée en amont, la branche ne sera plus nécessaire et peut généralement être supprimée.

Philipp
la source