Почему `git push` для удаленного не удаленного, а не двойного`git fetch` от удаленного

Во-первых, я понимаю, как связаны с отправкой на не-голые пульты git, включая использование опции git config receive.denyCurrentBranch и другие обходные пути, поэтому я не ищу ответы, такие как здесь:

Это скорее вопрос реализации / представления / философии git.

Почему не может git push <remote> для не голого пульта дистанционного управления быть двойным или по существу таким же, как git fetch <source> с пульта? Таким образом, мой локальный рабочий каталог на удаленном может устареть (отставать) от нового контента, и у меня даже могут быть локальные изменения (фиксируются заранее или даже ставятся / не ставятся / хранятся / что угодно), но этот рабочий каталог полностью нетронутый операцией push? Если бы это было так, то однажды на пульте я мог бы слить или перебазировать или что угодно. Фактически, это именно то, что заявлено в этой записи в git faq для kernel.org.

Мотивация для этого действительно такая же, как и у всех, кто задает вопросы " как": у меня нет никакого способа легко получить доступ к "источнику" push-сообщения с пульта по причинам {firewall, nat, security}.

Возможно, мне не хватает фундаментальных знаний о том, как git действительно отслеживает вещи, которые "если бы я только понял XXXX", я бы знал ответ; просвети меня, пожалуйста.

1 ответ

Решение

Проблема в том, что нажатие переписывает ссылки. HEAD является синонимом последней проверки и переписывания, что ref молча аннулирует рабочее дерево и индекс - фиксация в этом репо потеряет внесенные изменения, без указания того, что это произошло. Отказ от толчка - самое простое решение. Если делать git pull в пункте назначения не вариант, затем нажмите на одноразовое решение и исправьте ссылки:

git push origin master:fakemaster
cd $origindir
git checkout -B master fakemaster
git branch -D fakemaster
Другие вопросы по тегам