Перезаписать мастер при разработке - PullRequest
0 голосов
/ 11 июня 2018

Каким-то образом в нашем проекте наш главный филиал полностью сломался.Он думает, что впереди несколько коммитов, и если мы попытаемся слиться, в нем появятся огромные конфликты.Он долго ломался, поэтому в разработке произошло много событий (слишком много конфликтов, которые нужно разрешить).

Я хочу просто перезаписать все в мастере при разработке (так что мастер в основном равняется разработке).Как мне это сделать?

Я попытался удалить все в мастере локально, затем запустил следующее:

git checkout master
git reset --hard develop

Кажется, чтобы дать мне все правильные файлы, но когда я пытаюсь нажать мастерЯ получаю эту ошибку:

Updates were rejected because the tip of your current branch is behind

Ответы [ 3 ]

0 голосов
/ 11 июня 2018

вы можете перейти к мастеру с помощью git checkout master и использовать эту команду:

git merge --strategy-option theirs develop

это автоматически примет изменения в ветви разработки, если возникнут конфликты

это пример для него

option2 - вы также можете перейти к ветке develop и удалить master, а затем воссоздать мастер из разработки следующим образом:

git checkout develop
git branch -d master
git push -f :master
git checkout -b master

помните, если выиспользуйте что-то вроде gitlab, сначала вы должны отключить удаленный репозиторий Protected Branches для master

0 голосов
/ 11 июня 2018

Я хочу просто перезаписать все в master с помощью develop (поэтому master в основном равно develop).Как мне это сделать?

Опция --force из git-branch сделает именно это:

git checkout develop
git branch -f master develop

Обратите внимание, как вам нужно переключиться на другую ветку перед изменением master, так как git-branch откажется изменить текущую ветку.

В качестве альтернативы, вы можете использовать git-update-ref сантехническая команда :

git update-ref refs/heads/master refs/heads/develop

, которая позволяет изменять любую ссылку, независимо от того, куда в данный момент указывает HEAD.Просто имейте в виду, что git-update-ref обрабатывает аргументы как пути к файлам относительно каталога .git .

Наконец, вам нужно использовать параметр -f --forcegit-push для перезаписи удаленной ветки master:

git push -f origin master

Из документации :

Обычно, "git push" отказывается обновлять удаленную ссылку, которая не является предком локальной ссылки, используемой для ее перезаписи.

Эта опция отменяет это ограничение, если текущее значение удаленной ссылки является ожидаемым значением.иначе «git push» не работает.

0 голосов
/ 11 июня 2018

Как вы продвигаетесь к мастеру?В этом случае вы не можете делать обычный толчок.

Вы пытались принудительно нажать на git push -f?Принудительное нажатие отменяет историю на удаленном устройстве и должно выполняться с осторожностью.

-f
--force
Обычно команда отказывается обновлять удаленную ссылку, которая не являетсяпредок локального ссылки раньше переписывал его.Кроме того, когда используется параметр --force-with-lease, команда отказывается обновлять удаленную ссылку, текущее значение которой не соответствует ожидаемому.

Этот флаг отключает эти проверки и может вызвать удаленное хранилище.потерять коммиты;используйте его с осторожностью.

Обратите внимание, что --force применяется ко всем отправляемым ссылкам, поэтому используйте его с заданным значением push.default или с несколькими назначениями push, настроенными для удаленного доступа. *. push может перезаписывать ссылкикроме текущей ветви (включая локальные ссылки, которые строго отстают от своего удаленного аналога).Чтобы принудительно нажать только одну ветвь, используйте + перед refspec для push (например, git push origin + master, чтобы принудительно нажать на главную ветвь).Подробнее см. В разделе ...

Источник: https://git -scm.com / docs / git-push

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...