Разветвление Git - запрос на ветку HEAD также принимает предыдущие ветки - PullRequest
0 голосов
/ 03 мая 2018

Я из IBM RTC, поэтому мне нужно привыкнуть к Git.
Я разветвил репозиторий, сделал пару коммитов в моей основной ветке и открыл запрос на извлечение.

Pull request:
original-repository/master <- my-repository/master
  commit-1
  commit-2

Затем я создал новую ветку и выдвинул изменение. Я открыл еще один пул-запрос, начиная с новой ветки, и вот что я нахожу.

Pull request:
original-repository/master <- my-repository/newbranch
  commit-1
  commit-2
  commit-3

Что делать, если я хочу получить запрос на получение только с commit-3?

1 Ответ

0 голосов
/ 03 мая 2018

Я действительно удивлен, что это не дубликат ... Оказывается Я уже ответил почти на тот же вопрос . Фиксация это дубликат (т.е. есть ветка с 2 ненужными коммитами). Однако проблема сформулирована совсем по-другому (например, в другом вопросе не упоминаются запросы на извлечение), и я бы не нашел ее, если бы там не было моего ответа.

Использование git rebase --onto.

В вашем локальном хранилище:

git checkout newbranch
git rebase master --onto origin/master
git push origin +newbranch  # May look slightly different for you; The point is, you need to force push (the + does that).

NB, во второй строке master можно заменить на HEAD~ или другой ссылкой на commit-2.

Краткое объяснение: git принимает коммиты между указанным на него (в данном случае master) и текущим коммитом и реплицирует их один за другим в точке, определенной как --onto. Если некоторые коммиты не могут быть применены автоматически, процесс приостанавливается, и вам приходится разрешать конфликты вручную.

Предостережение: не нажимайте силой, если вы не уверены, что это безопасно . Если вы перешли в свой собственный репозиторий fork и можете предположить, что его никто не использует, у вас, вероятно, все в порядке (даже если это технически общедоступно). Это ваша частная ветка, которой иногда может быть достаточно, чтобы означать, что все в порядке. Но важно знать риски, связанные с удалением истории (или попытка ).

Альтернативы (cherry-pick): мой ответ на другой вопрос подробно описывает некоторые альтернативы. Ситуация там по сути та же, ветка F1 содержит ненужные коммиты.

...