Задать вопрос
@Yariy

Как сбросить состояние ветки develop к master непосредственно в репозитории (origin)?

Навожу порядок в репозитории, получилось так, что в develop много мусора, которого там быть не должно (накопилось по времени примерно за год).
Как сбросить origin/develop к состоянию origin/master?
Когда сбрасываю локально git reset --hard master то не могу запушить в репозиторий, только сделать pull
  • Вопрос задан
  • 264 просмотра
Подписаться 2 Простой 2 комментария
Решения вопроса 3
miraage
@miraage
Старый прогер
Когда сбрасываю локально git reset --hard master то не могу запушить в репозиторий, только сделать pull


После такого надо форс пуш делать.
Ответ написан
Комментировать
@karminski
Senior React.JS Developer
Удалить origin/develop и создать новый от origin/master
Ответ написан
Комментировать
sergey-kuznetsov
@sergey-kuznetsov Куратор тега Git
Автоматизатор
Самый безопасный способ — создать синтетический коммит слияния, вливающий текущее актуальное состояние ветки master в ветку develop. Так у вас не будет проблем с отправкой исправления в общий репо и не будет конфликта с коллегами.

git checkout develop # удостовериться что мы в нужной ветке
git merge --ff $(git commit-tree -p develop -p master -m "Reset develop to master" master^{tree})

Подробное объяснение

По мотивам аналогичного вопроса
  • Конструкция master^{tree} — это ссылка на текущее состояние файлов из ветки master.
  • Команда git commit-tree — создаёт новый коммит, который:
  • Использует файлы из master.
  • Имеет двух «родителей»: текущий develop и master.
  • Устанавливает сообщение коммита: Reset develop to master.
  • Таким образом, создаётся «мостик» между develop и master, чтобы история изменений выглядела непрерывно.
  • git commit-tree -p develop -p master -m "Reset develop to master" master^{tree}
    — эта команда не просто создаст новый коммит, но ещё вернёт его хеш.
  • Обновляем develop, чтобы она просто «перескочила» на новый коммит.
    git merge --ff $(...)
  • --ff (fast-forward) говорит гиту просто передвинуть указатель develop вперёд на этот новый коммит, если это возможно без создания нового коммита слияния.
  • $(...) — это подстановка команды в bash, то есть git merge --ff получит на вход хеш коммита из предыдущего шага.

Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы