Как создать несколько merge request для разных коммитов?

Как можно разделить три коммита на три различных merge request в GitLab, если у меня уже есть открытый merge request, который включает все коммиты с ветки, а при попытке создать новый merge request система сообщает "These branches already have an open merge request" и предыдущий merge request еще не закрыт?
  • 30 августа 2024 г. 13:04
Ответы на вопрос 2
В GitLab вы можете создать несколько merge request (MR) для разных коммитов, но это немного усложняется, если у вас уже есть открытый merge request, который включает все эти коммиты. Вот несколько способов, как вы можете достичь желаемого результата:

### 1. Создание новых веток

1. **Создание новых веток для каждого коммита:** Для каждого коммита, который вы хотите вынести в отдельный merge request, создайте новые ветки от той ветки, в которой находятся ваши коммиты (от которой вы создали свой текущий merge request). Например:
   ```bash
   git checkout <branch-with-commits>
   git checkout -b new-branch-1 commit-hash-1
   git push origin new-branch-1
   ```

   Затем создайте новый merge request для `new-branch-1`. Повторите этот процесс для остальных коммитов.

2. **Второй подход с использованием `cherry-pick`:**
   Если ваши коммиты расположены на одной ветке и вы не хотите создавать новую ветку для каждого, вы можете использовать команду `cherry-pick`, чтобы создать новую ветку, включающую только нужный коммит.
   ```bash
   git checkout -b new-branch-1
   git cherry-pick commit-hash-1
   git push origin new-branch-1
   ```

   После этого создайте новый merge request для `new-branch-1`. Повторите для других коммитов.

### 2. Использование интерактивного rebase

1. Если ваши коммиты идут последовательно, вы можете использовать интерактивный rebase для преобразования ветки и разбиения коммитов на отдельные ветки.
   ```bash
   git checkout <current-branch>
   git rebase -i HEAD~3  # Если у вас три последних коммита
   ```
   В открывшемся редакторе замените `pick` на `edit` для каждого коммита. После этого вы можете извлекать коммиты по одному в новые ветки и создавать для них merge request.

### 3. Откат изменения в текущем merge request (если возможно)

Если ваш текущий OMR еще не принят, и вы можете провести откат до определенного состояния ветки, вы можете откатить (например, с помощью `git reset` или `git revert`) неудачные коммиты и сохранить их в другом месте (например, в виде патчей). Затем вы можете сделать новые ветки из состояния, в котором только требуется оставить коммиты для нового запроса.

### Заключение

Метод с созданием новых веток с помощью cherry-pick, скорее всего, будет самым простым и быстрым для решения вашей задачи, поскольку он позволит вам сохранить историю в разных merge request, не теряя при этом текущий запрос.
1) Создайте новую ветку из вашей текущей ветки 
2) Изолируйте коммит
3) Запушьте новую ветку
4) Создайте merge request
5) Повторите процесс для оставшихся коммитов
Похожие вопросы