Как исключить старые коммиты в новом пул-запросе? - PullRequest
1 голос
/ 13 марта 2019

Я принимал участие в проекте с открытым исходным кодом GitHub, PR был отклонен сопровождающим. Через несколько месяцев я поднял один PR, чтобы исправить какую-то другую проблему, но этот новый PR также включает в себя более старый commits. Как я могу исключить старые коммиты?

Вот старый PR для справки: https://github.com/spring-projects/spring-boot/pull/15006

новый PR ссылка: https://github.com/spring-projects/spring-boot/pull/15933

Pull request также включает изменения, которые я вытащил с upstream/master до master

Я также получил ниже git команд от сопровождающего:

git checkout master
git fetch upstream
git reset upstream/master --hard

Но я не уверен, что мы здесь делаем.

Ответы [ 2 ]

2 голосов
/ 13 марта 2019

Предполагая, что история 12 коммитов не важна, я буду делать в основном как:

  1. git reset HEAD~12
  2. git stash
  3. git pull upstream master --rebase для синхронизации с восходящим потоком
  4. git stash pop для отображения изменений и применения поверх последней версии
  5. Исправить конфликт, если таковой имеется, и избавиться от старого коммита
  6. git commit -m "some message"
  7. git push -f origin YOUR_BRANCH

Если вам небезразлична история коммитов, то, возможно, поступите так, как предложил @Tim Biegeleisen

  1. Получить последнюю версию из апстрима
  2. Создать новую ветку
  3. вишня выбирает коммиты, которые вы хотите включить один за другим в правильном порядке
  4. Отправить новый PR
1 голос
/ 13 марта 2019

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

Тем не менее, вы можете rebase свой PR-филиал локально и либо:

  • Принудительное продвижение вашей пиар-ветки (только если вы знаете, что делаете)
  • Закройте свой PR и создайте новый с перебазированной историей.

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

git checkout -b feature/failure-analyzer
git rebase -i HEAD~10 # Where 10 is the number of commits you want to rebase
git push --set-upstream origin feature/feature-analyzer

Давайте рассмотрим это по вашему сценарию:

  1. Хранилище Fork

    Вы подписали проект локально

    * a (HEAD, master, origin/master)
    ...
    
  2. Реализация вашей новой функции

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

     * e implementation done (HEAD, master, origin/master)
     * d again oops
     * c oops 
     * b implement feature foo
     * a 
    
  3. Убери свою работу

    Настало время очистить ваш коммит с

     $ git checkout -b feature/foo
     $ git rebase -i HEAD~5
    

    В конце концов вы получите эту историю:

     * f implement feature foo (HEAD, feature/foo)
     | * e implementation done (master, origin/master)
     | * d again oops
     | * c oops 
     | * b implement feature foo
     |/
     * a 
    
  4. сделать запрос на получение

    Теперь вы можете продвигать свою работу и создавать новый пул-запрос:

      $ git push --set-upstream origin feature/foo
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...