Git puzzler - Работа над "отказом от быстрой перемотки вперед"
В моем локальном репозитории git у меня было по существу:
* commit A
|
* commit B (master) (origin/master)
Я сделал некоторые изменения, так что теперь:
* commit A
|\
| * commit B (develop) (origin/master)
|
* commit C (master)
Я бы хотел, чтобы репозиторий git (размещенный на beanstalkapp.com) обновлялся, чтобы отразить это, и выглядите так:
* commit A
|\
| * commit B (develop) (origin/develop)
|
* commit C (master) (origin/master)
Как я могу это сделать? git push
не работает с denying non-fast-forward refs/head/master
. Каковы мои варианты, чтобы обойти это?
Мой репо не был организован, и я хотел бы его реорганизовать раз и навсегда.
Ответы
Ответ 1
git checkout master
git merge origin/master strategy=ours
git push origin master
В стратегии 'ours' игнорируются все изменения, сделанные между commit A
и B
, и производится "поддельное" слияние (объединение только в имени). git push
, то счастливо выполняет быстрое переключение между старым origin/master
и новым master
.
Результат:
* commit A
|\
| * commit B (develop)
| |
* | commit C
| /
* commit D, but identical to C (master) (origin/master)
Ответ 2
Вам разрешено принудительное нажатие?
В противном случае вы можете удалить ветку? В этом случае вы можете просто удалить старую ветку и нажать новую, что по сути является тем же, что и принудительное нажатие.