Я отправил изменение в проект с открытым исходным кодом на Github и получил комментарии к обзору кода от одного из членов основной команды.
Я хотел бы обновить код с учетом комментариев и повторно отправить его. Каков наилучший рабочий процесс для этого? Из моего ограниченного знания git / github я мог сделать любое из следующего:
Обновите код как новый коммит и добавьте как первоначальный, так и обновленный коммит в мой запрос на извлечение.
Каким-то образом (??) откатить старый коммит из моего репозитория и создать один новый коммит, содержащий все, а затем вызвать запрос на извлечение для этого?
git commit
есть функция изменения, но я слышал, что вы не должны использовать ее после того, как вы выдвинули коммит за пределы вашего локального репозитория? В этом случае я произвел изменение на своем локальном ПК и отправил в свою ветку github проекта. Можно ли использовать «изменить»?Что-то другое?
Кажется, что вариант 2/3 был бы хорош, поскольку проект с открытым исходным кодом имел бы только один коммит в своей истории, который бы реализовал все, но я не уверен, как это сделать.
Примечание: я не знаю, влияет ли это на ответ или нет, но я не вносил изменения в отдельную ветку, я просто сделал коммит поверх master
источник
master
это тоже ветка, так что технически это не важно :)Чтобы обновить пул-запрос
Чтобы обновить пул-запрос (пункт № 1), единственное, что вам нужно сделать, это извлечь ту же ветку, из которой пул-запрос, и нажать на нее снова:
Необязательно - Очистка истории коммитов
Вас могут попросить объединить ваши коммиты вместе, чтобы история репозитория была чистой, или вы сами хотите удалить промежуточные коммиты, которые отвлекают от «сообщения» в вашем запросе на извлечение (пункт № 2). Например, если ваша история коммитов выглядит так:
Хорошей идеей будет объединить все вместе, чтобы они выглядели как один коммит:
Это предложит вам выбрать, как переписать историю вашего запроса, в вашем редакторе будет следующее:
Для любого коммита, который вы хотите принять в предыдущем коммите, измените выбор на сквош:
И закройте свой редактор. Затем Git перезапишет историю и предложит вам предоставить сообщение о коммите для одного комбинированного коммита. Внесите соответствующие изменения, и ваша история коммитов будет краткой:
Протолкните это к вилке:
и ваш запрос на включение будет содержать один коммит, включающий все изменения, ранее разделенные на несколько коммитов.
Изменение истории в публичных репозиториях - это плохо
Переписывать историю и использовать
git push -f
ветку, которую, возможно, кто-то другой уже клонировал, является плохой вещью - это приводит к расхождению истории хранилища и извлечения.Однако, исправление истории вашего форка для исправления изменений, которые вы предлагаете интегрировать в репозиторий, - это хорошо. Таким образом, нет никаких оговорок, подавляющих "шум" из ваших запросов на получение.
Записка о ветвях
В приведенном выше примере я показываю, что запрос на извлечение пришел из
master
ветви вашего форка, в этом нет ничего плохого, но он создает определенные ограничения, такие как, если это ваша стандартная техника, возможность иметь только один PR, открытый для репозитория. , Однако лучше создать ветку для каждого отдельного изменения, которое вы хотите предложить:источник
git push -f
. Было не так много комментариев, но я этого не ожидал.prune
этот удаленный коммит не удален, его история все равно будет соответствовать комментариям PR.