Как создать коммит, который делает одну ветку идентичной другой? - PullRequest
0 голосов
/ 26 февраля 2019

Предположим, у меня есть две ветви: master и deploy.Ветвь master является текущим «краевым» кодом - функция и ветви исправления ошибок объединены в master.С другой стороны, ветвь deploy - это то, что отслеживает моя система CI для запуска автоматического развертывания.Обычный рабочий процесс будет состоять в том, что когда код считается «хорошим» на master, он объединяется с deploy, что вызывает автоматическое развертывание.

При тестировании среды CI я сделал несколько тестовых коммитов вdeploy филиал.Коммиты просто вносили изменения ради изменений, просто чтобы проверить триггер CI.Сейчас может быть около 12 коммитов, которые просто делают глупые случайные (но обнаруживаемые в развертывании) изменения.Теперь, когда CI работает, я хочу «откатить» ветку deploy до текущей master.

Проблема в том, что у меня нет возможности использовать --force для удаленного репо (разрешения).

Поэтому я хотел бы сделать коммит, который сделает ветви master и deploy идентичными.По сути, я хочу изменить текущие ветки deploy и master и добавить этот diff в качестве коммита для развертывания.Затем я могу объединить deploy в master, что не приведет к изменениям, и ветви снова будут синхронизированы.

Просто объединение master в deploy сейчас не будет работатьтак как изменения deploy будут сохранены.

Меня не волнует история коммитов.

Я знаю, что могу ввести отдельный файл из другого коммита или ветви, выполнив git checkout <branch> <file>.Что я в основном ищу, так это «проверяю ВСЕ файлы из другой ветки, но не переключаюсь на эту ветку».Тогда я могу просто сделать коммит и идти оттуда.

1 Ответ

0 голосов
/ 26 февраля 2019

Используя стратегию слияния , называемую нашей , например:

git checkout master
git merge deploy -s ours
git checkout deploy
git merge master
git push origin HEAD

сделает коммит слияния на deploy, который принимает 0 модификаций от deployчто бы то ни было, взяв весь код из master.Но это не переписывает историю, и вы сможете нажать deploy без --force.

Или, в интересах менее неуклюжей истории (спасибо eftshift0 за хитрый трюк), вы можете альтернативно пойти на этот подход:

git checkout --detach master
git merge -s ours deploy -m "setting content just like master"
git branch -f deploy
git push some-remote deploy
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...