21

У меня есть проект, который имеет 2 филиала, разработка и производство. Я не использую основную ветку, и каждый раз, когда я пишу git status он говорит мне, насколько далеко впереди моя ветка от master.

Когда я пытаюсь удалить мастер-ветку git branch -d master он удаляет его только в моем локальном хранилище, а не на удаленном git-сервере. Есть идеи?

2 ответа2

33

В Git ветка - это просто упорядоченный список коммитов (он же checkins). Что-то, что может немного сбить с толку новых пользователей, заключается в том, что ветвям не нужно иметь имя (хотя в большинстве случаев вы хотите его иметь); и нет ничего особенного в какой-либо конкретной ветке (master ветвь - это просто ветка по умолчанию, которая создается для вас при инициализации хранилища).

Вы, вероятно, уже знаете это, но Git отличается от некоторых других систем контроля версий, таких как популярная "Subversion", потому что каждая "рабочая копия" (на языке Subversion) является собственным репозиторием ... на самом деле, ничего особенного специальные о любой конкретной копии; за исключением того, что одна копия была в целом согласована как "каноническая" копия, которая используется для хранения конечного продукта.

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

git branch -d master

Однако, если вы не можете этого сделать, вы все равно можете сделать это с локального компьютера. Команда git branch имеет параметр -r который влияет на удаленный репозиторий. Другими словами, выполнение следующей команды должно работать:

git branch -d -r master

Обратите внимание, что в обоих этих случаях; Я предполагаю, что master полностью слился с историей разработки, в которой сейчас находится ваша локальная копия. Если вы никогда ранее не использовали master (то есть: когда-либо регистрировались в development или production), вам не о чем беспокоиться. Однако, если вы (или кто-то еще) проверяли вещи, чтобы master , то у вас может быть проблема. Вы можете принудительно удалить, изменив -d на -D в приведенных выше командах; но я настоятельно рекомендую проверить, что находится в master заранее! Если у вас нет доступа к удаленному компьютеру, вы, вероятно, не сможете его восстановить!


Кстати; если вы (или кто-то еще) новичок в Git, я настоятельно рекомендую прочитать Git from the Bottom Up Джона Вигли. Несмотря на то, что я немного использовал Git до того, как нашел эту статью, я не понимал, как она работает, пока не прочитал ее. Это довольно полезно!

4

master является веткой по умолчанию для git. Я не знаю, почему для вас так ужасно, когда git сообщает вам, как далеко вы от мастера, но если вы хотите удалить ветку в вашем удаленном репозитории, локального удаления недостаточно. Попробуйте это вместо этого:

git push origin :master

Это ничего не вытолкнет (часть перед двоеточием) на исходный сервер и перезапишет мастер. Другими словами, он должен удалить главную ветку удаленно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .