Как создать несколько 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) Создайте новую ветку из вашей текущей ветки <br/> 2) Изолируйте коммит <br/> 3) Запушьте новую ветку <br/> 4) Создайте merge request <br/> 5) Повторите процесс для оставшихся коммитов
Похожие вопросы