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

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

Навожу порядок в репозитории, получилось так, что в develop много мусора, которого там быть не должно (накопилось по времени примерно за год).
Как сбросить origin/develop к состоянию origin/master?
Когда сбрасываю локально git reset --hard master то не могу запушить в репозиторий, только сделать pull
  • Вопрос задан
  • 322 просмотра
Подписаться 2 Простой 2 комментария
Помогут разобраться в теме Все курсы
  • ProductStar
    Python + Flask + Git: веб-разработка с нуля
    2 месяца
    Далее
  • Учебный центр IBS
    DEV-007 Введение в систему контроля версий Git
    1 неделя
    Далее
  • Stepik
    Git (система контроля версий)
    1 неделя
    Далее
Решения вопроса 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 получит на вход хеш коммита из предыдущего шага.

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

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

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
Made In Dream Санкт-Петербург
от 100 000 до 220 000 ₽
от 250 000 до 320 000 ₽