Чтобы обновить запрос на извлечение
Чтобы обновить запрос на извлечение (пункт # 1), единственное, что вам нужно сделать, это извлечь ту же ветку, из которой получен запрос на извлечение, и снова нажать на нее:
cd /my/fork
git checkout master
...
git commit -va -m "Correcting for PR comments"
git push
Необязательно - Очистка истории коммитов
Вас могут попросить объединить ваши коммиты так, чтобы история репозитория была чистой, или вы сами хотите удалить промежуточные коммиты, которые отвлекают от "сообщения" вВаш запрос на получение (пункт № 2).Например, если ваша история коммитов выглядит следующим образом:
$ 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
Хорошая идея объединить вещи, чтобы они выглядели как один коммит:
$ git rebase -i parent/master
Это побудит вас выбратькак переписать историю вашего запроса извлечения, в вашем редакторе будет следующее:
pick 58ae094 fixing actual problem
pick fb30112 correct typos
pick eccaa56 code standard fixes
pick e4e32b8 add test case as per PR comments
Для любого коммита, который вы хотите стать частью предыдущего коммита - измените выбор на сквош:
pick 58ae094 fixing actual problem
squash fb30112 correct typos
squash eccaa56 code standard fixes
squash e4e32b8 add test case as per PR comments
И закройте свой редактор.Затем Git перезапишет историю и предложит вам предоставить сообщение о коммите для одного комбинированного коммита.Внесите соответствующие изменения, и ваша история коммитов теперь будет краткой:
$ git log --oneline parent/master..master
9de3202 fixing actual problem
Переместите это на ваш форк:
$ 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
, и ваш запрос на получение будет содержать один коммит, включающий все ранее разделенные измененияв несколько коммитов.
Изменение истории в общедоступных репозиториях - это плохо
Переписывание истории и использование git push -f
на ветке, которая, возможно, уже клонирована кем-то другим, это плохо - этоприводит к тому, что история хранилища и извлечение расходятся.
Однако, исправление истории вашего форка для исправления изменения, которое вы предлагаете интегрировать в хранилище - это хорошо,Таким образом, нет никаких оговорок, подавляющих "шум" из ваших запросов на извлечение.
Примечание к ветвям
В приведенном выше примере я показываю, что запрос на извлечение пришел из ветви master
вашегофорк, в этом нет ничего плохого, но это создает определенные ограничения, такие как, если это ваша стандартная техника, возможность иметь только один PR, открытый для репозитория.Хотя лучше создать ветку для каждого отдельного изменения, которое вы хотите предложить:
$ git branch feature/new-widgets
$ git checkout feature/new-widgets
...
Hack hack hack
...
$ git push
# Now create PR from feature/new-widgets