J'ai soumis une modification à un projet Open Source sur Github et reçu des commentaires de révision de code d'un des membres de l'équipe principale.
Je voudrais mettre à jour le code en tenant compte des commentaires de révision et le soumettre à nouveau. Quel est le meilleur flux de travail pour ce faire? De ma connaissance limitée de git / github, je pourrais faire l'une des choses suivantes:
Mettez à jour le code en tant que nouveau commit et ajoutez à la fois le commit initial et le commit mis à jour à ma demande d'extraction.
D'une manière ou d'une autre (??) restaurer l'ancien commit de mon référentiel, et créer un seul nouveau commit contenant tout, puis lancer une requête pull pour cela?
git commit
a une fonctionnalité de modification, mais j'ai entendu dire que vous ne devriez pas l'utiliser après avoir poussé la validation en dehors de votre référentiel local? Dans ce cas, j'ai effectué le changement sur mon PC local et poussé vers ma branche github du projet. Serait-ce correct d'utiliser «modifier»?Autre chose?
Il semble que l'option 2/3 serait bien, car le projet open source n'aurait qu'un seul commit dans son histoire qui implémenterait tout, mais je ne sais pas comment faire.
Remarque: je ne sais pas si cela affecte la réponse ou non, mais je n'ai pas apporté les modifications dans une branche distincte, je viens de faire un commit sur le maître
la source
master
est aussi une branche, donc techniquement, cela n'a pas d'importance :)Pour mettre à jour une demande d'extraction
Pour mettre à jour une demande d'extraction (point # 1), la seule chose que vous devez faire est d'extraire la même branche d'où provient la demande d'extraction et de la pousser à nouveau:
Facultatif - Nettoyage de l'historique des validations
Vous pouvez être invité à écraser vos validations ensemble afin que l'historique du référentiel soit propre, ou vous-même souhaitez supprimer les validations intermédiaires qui distraient du "message" dans votre demande de tirage (point n ° 2). Par exemple, si votre historique de commit ressemble à ceci:
C'est une bonne idée d'écraser les choses ensemble pour qu'elles apparaissent comme un seul commit:
Cela vous invitera à choisir comment réécrire l'historique de votre demande de pull, les éléments suivants seront dans votre éditeur:
Pour tout commit que vous souhaitez faire partie du commit précédent - changez le choix en squash:
Et fermez votre éditeur. Git réécrira alors l'historique et vous invitera à fournir un message de validation pour la validation combinée. Modifiez en conséquence et votre historique de validation sera désormais concis:
Poussez ça sur votre fourche:
et votre demande d'extraction contiendra un seul commit, incorporant toutes les modifications précédemment divisées en plusieurs commits.
Changer l'historique des dépôts publics est une mauvaise chose
Réécrire l'historique et l'utiliser
git push -f
sur une branche que quelqu'un d'autre a peut-être déjà clonée est une mauvaise chose - cela fait différer l'historique du référentiel et celui de la caisse.Cependant, la modification de l'histoire de la fourche pour corriger le changement que vous proposez d'être intégré dans un dépôt - est une bonne chose. En tant que tel, vous n'avez aucune réserve à éliminer le "bruit" de vos demandes de tirage.
Une note sur les branches
Dans ce qui précède, je montre que la demande de tirage provient de la
master
branche de votre fork, il n'y a rien de mal à cela nécessairement, mais cela crée certaines limitations telles que, si c'est votre technique standard, ne pouvant avoir qu'un seul PR ouvert par référentiel . Il est préférable de créer une branche pour chaque changement individuel que vous souhaitez proposer:la source
git push -f
. Il n'y a pas eu beaucoup de commentaires, mais c'est quelque chose à quoi je ne m'attendais pas.prune
ne supprime pas cette validation détachée, son historique correspondra toujours aux commentaires de PR.