Есть ли способ сквоша коммитов в fork после того, как запрос на извлечение был принят в исходное репозиторий?

#git #pull-request #git-fork

#git #запрос на извлечение #git-fork

Вопрос:

У меня есть форк репозитория, где я пишу свои части кода. Я допустил большую ошибку, написав фрагменты кода (обычно это ~ 50-100 строк sql-кода) в главную ветвь fork (хотя в то время я этого не осознавал), а затем вытащил запрашивающую главную ветвь fork в главную ветвь origin.

Настройки в исходном репозитории позволяют мне только сжимать и объединять коммиты. Итак, прямо сейчас я нахожусь в ситуации, когда каждый запрос на извлечение составляет 60 коммитов и 1 измененный файл (фактический, над которым я работал).

Есть ли способ каким-то образом синхронизировать состояния исходного репозитория и fork, чтобы удалить все ненужные коммиты из главной ветки?

Комментарии:

1. Вы ищете rebase

Ответ №1:

Быстрый ответ

Во-первых, используйте fetch в своем fork для получения информации о состоянии origin (исходного репозитория)

Затем вы сможете сравнить их состояния и решить, что вы хотите сделать.

Вы сможете переписать историю своего fork origin
Однако будет сложнее внести изменения origin в соответствии с вашими fork предпочтениями.:

  • Вам понадобятся дополнительные полномочия origin , чтобы переписать историю
  • Если у вас его нет, вам нужно будет согласовать это с кем-то, кто может сделать это за вас
  • Поскольку origin он доступен другим людям, их необходимо будет уведомить, потому что это может прервать то, над чем они работают

Для получения более подробного ответа о том, какие операции могут помочь вам достичь этого, вам нужно будет предоставить более подробную информацию о текущем состоянии origin и вашем fork , а также о том, в каком состоянии вы собираетесь их использовать. Эта команда может помочь:

 git log --graph --oneline --decorate
 

Ответ №2:

После некоторых исследований мне удалось найти приемлемое решение:

  • Найдите хэш коммита перед вашей первой фиксацией
  • сброс git — жесткий
  • git push -f origin master
  • git pull upstream master
  • мастер git push origin master

И моя вилка (источник здесь) синхронизируется с восходящим потоком.

Комментарии:

1. Под «вашим первым коммитом» вы подразумеваете первый коммит форка или первый коммит последней работы с момента последнего PR из форка?

2. Прошло много времени с тех пор, как я работал над этой проблемой, но, если я не ошибаюсь, это был первый коммит форка