Отменить коммит слияния из защищенной ветки на GitHub.com
Мы защитили нашу ветвь разработки на GitHub, чтобы никто из нижестоящих не мог напрямую выполнить их коммит. Коммиты должны проходить через ветку определенных функций и объединяться посредством запроса на удаление.
Был сценарий, когда ветвь функций объединяется с ветвью разработки (после надлежащего просмотра и изменений), и мы должны отменить ее позже (возможно, из-за изменений в требованиях). Если я попытаюсь вернуть коммит слияния в нисходящем направлении, он не позволит мне нажать, так как ветка защищена. Я помню, как GitHub предоставлял кнопку возврата, когда мы объединяем ветку. Но почему-то я не могу увидеть (или найти) кнопку сейчас. Нам нужно было отменить фиксацию по приоритету, поэтому мы временно удалили защиту из разрабатываемой ветви и выдвинули отменить коммит (самый уродливый взлом).
Есть ли другая лучшая альтернатива для возврата коммита из защищенной ветви? Может быть, я пропустил или неправильно понял некоторые функции GitHub.
Еще один сценарий: что если я удалю ветку из GitHub после слияния, то как мне тогда отменить ее?
1 ответ
Возврат на GitHub
Вам не нужно восстанавливать (восстанавливать) ветки на GitHub, чтобы отменить коммиты слияния, полученные в результате запросов на получение. Например:
Необратимый запрос на извлечение
Иногда кнопка возврата не появляется. Из справки GitHub по отмене запроса на удаление:
Примечание: вам может понадобиться использовать Git для ручного возврата отдельных коммитов, если:
- Отмена запроса на получение вызывает конфликты слияния
- Первоначальный запрос на извлечение не был изначально объединен на GitHub (например, с использованием ускоренного слияния в командной строке)
Мне потребовалось некоторое время, чтобы найти пример, но если головная ветвь не была объединена с базовой веткой с помощью большой зеленой кнопки на GitHub, то ее нельзя вернуть на GitHub:
git revert
Локально в командной строке вы можете использоватьgit revert
Команда, чтобы отменить изменения.
Это будет работать как в вашей защищенной ветке, так и в нисходящей. git revert
создает новый коммит перед текущим HEAD, поэтому вам не нужно принудительно выдвигать, и если из нисходящей ветви вы можете вручную создать запрос на извлечение для отмененных изменений.
Отменить фиксацию слияния немного сложнее, чем отменить коммит с одним родителем, поэтому я бы посоветовал взглянуть на этот вопрос для получения дополнительной информации, поскольку я никогда не делал этого раньше.
Если людям неудобно использовать командную строку, я думаю, что SourceTree имеет пункт в контекстном меню, чтобы отменить коммит, но я не знаю, как он обрабатывает коммиты слияния. Там могут быть аналогичные параметры в других приложениях с графическим интерфейсом.
Надеюсь это поможет!
Самый простой вариант - выполнить следующие
git revert -m 1 "last_commit_id"