Как удалить оригинал / мастер в Git

19814
Atcold

Я не могу удалить origin/masterс моего сервера. Понятия не имею почему.

Скриншот моего терминала

Сообщение об ошибке следующее

remote: error: By default, deleting the current branch is denied, because the next remote: error: 'git clone' won't result in any file checked out, causing confusion. remote: error:  remote: error: You can set 'receive.denyDeleteCurrent' configuration variable to remote: error: 'warn' or 'ignore' in the remote repository to allow deleting the remote: error: current branch, with or without a warning message. remote: error:  remote: error: To squelch this message, you can set it to 'refuse'. remote: error: refusing to delete the current branch: refs/heads/master To acanzian@elab.ecn.purdue.edu:/export/home/a/elabshare/git/ID-check.git ! [remote rejected] master (deletion of the current branch prohibited) error: failed to push some refs to 'acanzian@elab.ecn.purdue.edu:/export/home/a/elabshare/git/ID-check.git' 

Нет, я не использую Github .

9
Почему вы хотите это сделать? Есть ли другие филиалы? Daniel B 10 лет назад 1
Действительно, есть и другие ветки (проверьте ссылку на изображение, не могли бы вы показать его мне, пожалуйста?). Нам пришлось перебазировать `master`, и мы сделали это на временной ветви, которая теперь должна стать` master`. Единственная проблема в том, что я не знаю, почему я не могу убить мастера на сервере. Atcold 10 лет назад 0
Возможно, не тот ответ, который вы ищете, но вы можете принудительно переместить перебазированный `master` в` origin / master`, эффективно заменив старый на новый. SlightlyCuban 10 лет назад 2
В дополнение к сообщению об ошибке, пожалуйста, отправьте команду, которую вы используете. Kyralessa 10 лет назад 0
@Kyralessa, посмотрите на скриншот. Atcold 10 лет назад 0
@SlightlyCuban, я пытался избежать * форсирования * вещей и нашел вместо этого «чистый» способ :) Atcold 10 лет назад 0
Вы не единственный, кого я видел с представлением о том, что «сила» - ужасная или грязная вещь. Нам всегда говорят не заставлять вещи. Принуждение дверной ручки может сломать ее. Усиление винта может лишить голову. Но принуждение к Git не принесет никакого вреда, если вы знаете, что он заменит. Вы не испортите Git, не сломаете его и не оставите его неспособным функционировать. Наличие «-f» - это просто способ сказать: «Я понимаю, что, делая это, я * могу * потерять работу, но я знаю, что я делаю, так что продолжайте и делайте это в любом случае». Kyralessa 10 лет назад 0
@ Atcold, я обычно не рекомендую форсировать, но, похоже, вы все равно указали `master` на другую ветку. В этом случае `--force` и` delete && push` будут иметь одинаковый конечный результат. Единственное отличие: удаление будет двухэтапной операцией, которая может быть более чистой, если вы не планируете нажимать сразу после нее. SlightlyCuban 10 лет назад 0
@SlightlyCuban, моей первой заботой было понять, почему моя машина не сгибалась под мою волю. Теперь я снова ее хозяин! :) Atcold 10 лет назад 0

2 ответа на вопрос

12
Kyralessa

Вместо того, чтобы фактически удалить мастер с сервера, вы можете заменить его следующим образом:

git push origin otherbranch:master -f 

Это заменит master на содержимое другого филиала, но все равно будет называться master на удаленном компьютере. И тогда вы можете проверить мастер как мастер в вашем местном.

Хорошо спасибо! Я знаю, что могу форсировать вещи, но мне было интересно, почему я не смог удалить ветку `master`, и принятый ответ объясняет почему. Atcold 10 лет назад 0
+1. Это был единственный способ удалить плохой первый коммит на пульте / origin / master. ctn 8 лет назад 1
5
SlightlyCuban

Интересный факт: даже удаленные репозитории находятся на ветке. Вы получаете отказ, потому что вы пытаетесь удалить ветку, которую ваш источник в настоящее время "извлек".

Если у вас есть прямой доступ к репо, вы можете просто открыть каталог пустых репортов оболочки и использовать старый добрый каталог, git branchчтобы увидеть, какой источник ветки находится в данный момент. Чтобы изменить его на другую ветку, вы должны использовать git symbolic-ref HEAD refs/heads/another-branch.

Если вы используете такой сервис, как Github или Gitorious, вам придется использовать пользовательский интерфейс, который инструмент предоставляет вам для внесения изменений (см. Этот ответ, чтобы узнать, как это сделать в обычных инструментах).

Круто, это сработало и дало мне возможность узнать больше о `refs` в * Git *! Большое спасибо! (Да, я знал о том, как справиться с этим на * Github *, но не на нашем личном сервере.) Atcold 10 лет назад 0

Похожие вопросы