J'ai bifurqué un projet sur github et j'ai réussi à apporter des modifications à mon maître local et à pousser à l'origine sur github. Je souhaite envoyer une demande d'extraction, mais je souhaite uniquement inclure le dernier commit. L'interface utilisateur de demande de pull sur github.com affiche les 9 derniers commits et je ne sais pas comment filtrer cela.
J'essayais de comprendre si je devais créer une nouvelle branche locale, vérifier cela et en quelque sorte réinitialiser ou rebaser en amont? Appliquer ensuite mon dernier commit de mon maître par id à la nouvelle branche locale et l'utiliser pour la pull request?
J'essaie de bien comprendre les concepts et de trouver les bonnes lignes de commande pour faire ce dont j'ai besoin.
git
github
pull-request
Kevin Hakanson
la source
la source
Réponses:
Vous devez essentiellement créer une nouvelle branche et sélectionner les commits que vous souhaitez y ajouter.
Ensuite, vous verrez la
<new-branch-name>
branche sur github, basculez vers elle et pouvez soumettre la demande de pull avec les modifications que vous souhaitez.la source
git remote add upstream <git repository>
etgit remote update
avant d'exécuter git checkout -b en amont en amont / maître.Créez une nouvelle branche à partir de la dernière validation, qui se trouve également dans le référentiel d'origine:
Ensuite, utilisez
git cherry-pick
pour obtenir le commit unique pour lequel vous souhaitez la demande de pull. Si la branche avec ce commit est appeléefeature
et que le commit que vous voulez est le dernier commit de cette branche, ce seraEn supposant que ce patch s'applique sans conflit, vous avez maintenant une branche pour laquelle vous pouvez faire votre demande de tirage.
Dans un deuxième temps, vous devez maintenant décider quoi faire de votre
feature
agence. Si vous n'avez pas encore publié vos modifications sur cette branche, la meilleure procédure consiste probablement à rebaser cette branche sur new-branch (et à supprimer le dernier commit, si cela n'est pas fait automatiquement pargit rebase
).la source
feature
est déjà engagéorigin/master
, rien ne se passe pendantcherry-pick
. La nouvelle succursale devrait provenir deupstream/master
(c.-à-d., La réponse de Kevin Hakanson)Je me suis retrouvé dans une situation où j'avais bifurqué une fourchette et que je voulais soumettre une demande de retrait au projet d'origine.
J'ai eu:
Pour ce faire, je:
Les commandes git étaient quelque chose comme:
Ensuite, j'ai choisi my-feature-request comme branche de ma demande d'extraction vers le projet d'origine.
la source
Cela a presque fonctionné pour moi:
La seule différence était la suivante:
Je devais changer cette dernière ligne pour que git push fasse la branche en amont dans mon référentiel GitHub afin que je puisse en faire PR.
la source
J'avais déjà fait le commit que je voulais pouvoir isoler en tant que pull request sur la branche courante.
J'ai donc vérifié une nouvelle branche
Et voici où ma solution diffère de celle de @Kevin Hakanson , car je dois réinitialiser cette branche à l'endroit de l'histoire dont je veux me différencier
Et choisissez le commit à partir duquel je veux créer une demande de tirage isolée
Enfin, poussez-le vers la télécommande
Et tirez la demande dat shi.
la source
La solution pour créer une nouvelle branche (temporaire), choisir la cerise sur le gâteau et créer la demande d'extraction pour cette branche ne m'a pas satisfait. Je ne voulais pas modifier mon référentiel pour rendre un ensemble de validations disponibles, j'ai donc proposé l'alternative suivante:
Créez d'abord des fichiers de correctifs pour tous les commits d'intérêt:
Si l'engagement d'intérêt est le dernier que vous pouvez utiliser à la
HEAD
place<sha>
.Maintenant, vous pouvez envoyer les correctifs au responsable du référentiel source, qui peut les appliquer:
Enfin, cela devrait avoir la même apparence que si une branche temporaire était fusionnée par une requête pull, mais sans avoir cette branche supplémentaire dans le fork-repository.
la source
Sur la base de la réponse de @ kevin-hakanson, j'ai écrit ce petit script bash pour faciliter ce processus. Il ajoutera le référentiel en amont s'il n'existe pas déjà (vous demandant l'URL), puis demandera à la fois le nom de la nouvelle branche à créer et la balise / SHA du commit to cherry pick sur cette branche. Il vérifie sur quelle branche ou validation vous êtes actuellement, puis stocke toutes les modifications afin que vous puissiez extraire la nouvelle branche. La stratégie de fusion conserve les modifications de la validation sélectionnée. Après avoir poussé la nouvelle branche vers
origin
(supposé être le nom de votre dépôt distant), la branche ou la validation sur laquelle vous vous trouviez auparavant est à nouveau extraite et vos modifications précédentes sont sorties de la cachette.(Cela a fonctionné pour moi dans quelques tests simples, mais je ne suis pas un programmeur bash ou un expert git, alors faites-moi savoir s'il y a des cas que j'ai ratés qui pourraient être mieux automatisés!)
la source