GitHub: Как создать pull-запрос из разветвленного репозитория в репозиторий upstream, включая некоторые прошлые коммиты
Я разветвил хранилище шаблонов (T) на GitHub и проделал некоторую работу в своем собственном репо (X), используя шаблон.
Теперь репо X полностью конфликтует с репо Т из-за нестандартной работы, которую я перенес на Х.
Помимо выполнения пользовательской работы с шаблоном, я также сделал некоторые улучшения шаблона.
Я создал запрос на удаление, но он содержит все мои прошлые коммиты с момента разветвления. Я хочу включить только улучшения шаблона (всего несколько коммитов в середине моей истории коммитов) в запрос на извлечение. Как мне этого добиться?
1 ответ
Вы должны отделить изменения шаблона (коммиты улучшений, которые вы хотите объединить с репозиторием в восходящем направлении с помощью pull-запроса) от ваших пользовательских коммитов.
Лучше всего использовать два разных git-репозитория, но в случае, если вы предпочитаете поддерживать только один, вы должны:
- Сделайте резервную копию своей истории, создав новую временную ветку
git checkout -b tempmaster git checkout master # return to the previous one if master
- Если вы этого не делали раньше, добавьте исходный репозиторий шаблонов (T) в качестве удаленного по потоку:
git remote add upstream https://github.com/...
- Получить все удаленные изменения
git fetch --all
- Хард ресет вашей текущей ветки в репозиторий
git reset --hard upstream/master # if master
- Импортируйте ваши улучшения коммитов (
git cherry-pick
) из временной ветки и исправьте конфликты. - Когда закончите, нажмите на новую "перебазированную" ветку и создайте запрос
- Теперь из этой ветки вы можете создать свою собственную ветку
git checkout -b myapp
и импортируйте ваши пользовательские коммиты таким же образом.
После исправления, когда вы хотите обновить ветвь ветки (master) с изменениями в восходящем направлении, используйте rebase: git rebase upstream/master