GitHub: Как создать pull-запрос из разветвленного репозитория в репозиторий upstream, включая некоторые прошлые коммиты

Я разветвил хранилище шаблонов (T) на GitHub и проделал некоторую работу в своем собственном репо (X), используя шаблон.

Теперь репо X полностью конфликтует с репо Т из-за нестандартной работы, которую я перенес на Х.

Помимо выполнения пользовательской работы с шаблоном, я также сделал некоторые улучшения шаблона.

Я создал запрос на удаление, но он содержит все мои прошлые коммиты с момента разветвления. Я хочу включить только улучшения шаблона (всего несколько коммитов в середине моей истории коммитов) в запрос на извлечение. Как мне этого добиться?

1 ответ

Решение

Вы должны отделить изменения шаблона (коммиты улучшений, которые вы хотите объединить с репозиторием в восходящем направлении с помощью pull-запроса) от ваших пользовательских коммитов.

Лучше всего использовать два разных git-репозитория, но в случае, если вы предпочитаете поддерживать только один, вы должны:

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

После исправления, когда вы хотите обновить ветвь ветки (master) с изменениями в восходящем направлении, используйте rebase: git rebase upstream/master

Другие вопросы по тегам