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:
cd /my/fork
git checkout master
...
git commit -va -m "Correcting for PR comments"
git push
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:
$ git remote add parent git@github.com:other-user/project.git
$ git fetch parent
$ git log --oneline parent/master..master
e4e32b8 add test case as per PR comments
eccaa56 code standard fixes as per PR comments
fb30112 correct typos and fatal error
58ae094 fixing problem
C'est une bonne idée d'écraser les choses ensemble pour qu'elles apparaissent comme un seul commit:
$ git rebase -i parent/master
Cela vous invitera à choisir comment réécrire l'historique de votre demande de pull, les éléments suivants seront dans votre éditeur:
pick 58ae094 fixing actual problem
pick fb30112 correct typos
pick eccaa56 code standard fixes
pick e4e32b8 add test case as per PR comments
Pour tout commit que vous souhaitez faire partie du commit précédent - changez le choix en squash:
pick 58ae094 fixing actual problem
squash fb30112 correct typos
squash eccaa56 code standard fixes
squash e4e32b8 add test case as per PR comments
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:
$ git log --oneline parent/master..master
9de3202 fixing actual problem
Poussez ça sur votre fourche:
$ git push -f
Counting objects: 19, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (11/11), 978 bytes, done.
Total 11 (delta 9), reused 7 (delta 6)
To git@github.com:me/my-fork.git
f1238d0..9de3202 HEAD -> master
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:
$ git branch feature/new-widgets
$ git checkout feature/new-widgets
...
Hack hack hack
...
$ git push
# Now create PR from feature/new-widgets
master
est aussi une branche, donc techniquement, cela n'a pas d'importance :)