Para actualizar una solicitud de extracción
Para actualizar una solicitud de extracción (punto n. ° 1), lo único que debe hacer es retirar la misma rama de la que proviene la solicitud de extracción y presionarla nuevamente:
cd /my/fork
git checkout master
...
git commit -va -m "Correcting for PR comments"
git push
Opcional: historial de confirmación de limpieza
Es posible que se le solicite que aplaste sus confirmaciones para que el historial del repositorio esté limpio, o que desee eliminar las confirmaciones intermedias que distraen del "mensaje" en su solicitud de extracción (punto # 2). Por ejemplo, si su historial de confirmación se ve así:
$ 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
Es una buena idea juntar las cosas para que aparezcan como una sola confirmación:
$ git rebase -i parent/master
Esto le pedirá que elija cómo reescribir el historial de su solicitud de extracción, lo siguiente estará en su editor:
pick 58ae094 fixing actual problem
pick fb30112 correct typos
pick eccaa56 code standard fixes
pick e4e32b8 add test case as per PR comments
Para cualquier compromiso que desee formar parte del compromiso anterior: cambie la selección para aplastar:
pick 58ae094 fixing actual problem
squash fb30112 correct typos
squash eccaa56 code standard fixes
squash e4e32b8 add test case as per PR comments
Y cierra tu editor. Git reescribirá el historial y le pedirá que proporcione un mensaje de confirmación para la confirmación combinada. Modifique en consecuencia y su historial de confirmación ahora será conciso:
$ git log --oneline parent/master..master
9de3202 fixing actual problem
Empuja eso a tu tenedor:
$ 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
y su solicitud de extracción contendrá una sola confirmación, incorporando todos los cambios previamente divididos en varias confirmaciones.
Cambiar la historia en repositorios públicos es algo malo
Reescribir el historial y usarlo git push -f
en una rama que, potencialmente, alguien más ya ha clonado es algo malo, ya que hace que el historial del repositorio y el del proceso de pago difieran.
Sin embargo, es bueno enmendar el historial de su bifurcación para corregir el cambio que propone integrar en un repositorio. Como tal, no tenga reservas que eliminen el "ruido" de sus solicitudes de extracción.
Una nota sobre ramas
En lo anterior, muestro que la solicitud de extracción proviene de la master
rama de su bifurcación, no hay nada de malo en eso necesariamente, pero crea ciertas limitaciones, como, si esta es su técnica estándar, solo poder tener un PR abierto por repositorio . Sin embargo, es una mejor idea crear una rama para cada cambio individual que desee proponer:
$ git branch feature/new-widgets
$ git checkout feature/new-widgets
...
Hack hack hack
...
$ git push
# Now create PR from feature/new-widgets
master
es una rama demasiado, por lo que técnicamente no importa :)