Почему Git позволяет переместиться в извлеченную ветку в добавленном рабочем дереве? Как мне восстановиться?

Git обычно отказывается от нажатия на (одну) проверенную в данный момент ветку обычной, не--bare репозиторий:

$ git push upstream master
Counting objects: 1, done.
Writing objects: 100% (1/1), 188 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because ...

Это правильное поведение. УвидетьGit push error '[удаленный отклонен] master -> master (ветка в настоящее время извлечена)'.

Тем не менее, в том же самом апстриме у меня есть добавленное рабочее дерево с другой веткой. Как раз перед вышеприведенной демонстрацией ошибок я запустил:

$ git push upstream pytest

а такжеэто удалоськогда явно не должно быть, по той же причинеmaster терпит неудачу здесь. Особенно,receive.denyCurrentBranch действительно установлен, чтобы отрицать текущие ветви.

В этой восходящей системе,git worktree list говорит:

$ git worktree list
<path1>     9febb4c [master]
<path2>     406bef8 [pytest]

который показывает, что по крайней меречасть из Git знает, что это проверено. Но тогда это все равно позволило толчок, что приводит к двум вопросам:

Это ошибка?

Теперь, когда я нахожусь в этом беспорядке, как я могу восстановиться?

(Примечание: я случайно наткнулся на это, используя вторичные рабочие деревья, поэтому я записываю это для потомков. Поэтому я выложу свой собственный ответ.)

Ответы на вопрос(1)

Ваш ответ на вопрос