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
Давайте рассмотрим это по вашему сценарию:
Хранилище Fork
Вы подписали проект локально
* a (HEAD, master, origin/master)
...
Реализация вашей новой функции
Во время процесса разработки вы допустили несколько ошибок и получили шумные коммиты. К сожалению, вы уже поместили свои изменения в свой разветвленный репозиторий.
* e implementation done (HEAD, master, origin/master)
* d again oops
* c oops
* b implement feature foo
* a
Убери свою работу
Настало время очистить ваш коммит с
$ 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
сделать запрос на получение
Теперь вы можете продвигать свою работу и создавать новый пул-запрос:
$ git push --set-upstream origin feature/foo