Почему я могу извлечь удаленную ветку Git и почему она все еще доступна на GitHub? - PullRequest
1 голос
/ 24 августа 2011

В начале у меня есть только ветвь master .

Затем я создаю новую ветку следующей командой:

git branch 'branch1'

Затем я добавляю некоторый файл в branch1 и объединяю его с master. Затем я выполняю следующую команду, чтобы удалить branch1 .

git branch -d branch1

Тогда локально я могу видеть только основную ветку. Но на GitHub я все еще вижу branch1 в списке ветвей.

И я все еще могу оформить ветку1, хотя я ее удалил.

Почему?

Ответы [ 3 ]

3 голосов
/ 24 августа 2011

Это потому, что вы выдвинули ветку на github, а git branch -d BRANCHNAME удаляет ветки только локально, пока указатель на github остается нетронутым.Если вы также хотите удалить его на github, вы можете сделать git push origin :BRANCHNAME (обратите внимание на двоеточие, и это также предполагает, что «origin» - это ваш репозиторий github, который по умолчанию используется afaik)

См. это для более подробной информации о команде.

3 голосов
/ 24 августа 2011

Если вы единственный человек, использующий этот репозиторий GitHub, вы должны протолкнуть branch1 к нему в какой-то момент, вероятно, с git push origin branch1 или чем-то подобным.

Как Александр говорит , что вы можете удалить ветку branch1 из GitHub с помощью:

git push origin :branch1

... но затем, чтобы удалить ветку удаленного отслеживания origin/branch1, вы должны сделать:

git remote prune origin

Интересно, что вы все равно можете оформить заказ branch1, предположительно с:

git checkout branch1

... даже если вы удалили локальную ветку.Оказывается, это потому, что, начиная с v1.6.6, git будет пытаться угадать, что вы имеете в виду, когда пытаетесь извлечь несуществующую ветвь, но существует только одна ветка удаленного отслеживания с подходящим именем.Это введено в этот коммит сопровождающим git, Junio ​​C Hamano:

DWIM "git checkout frotz" для "git checkout -b frotz origin / frotz"

Когда 'frotz' не является допустимым именем объекта и не отслеживаемым именем файла, мы жаловались и не выполняли эту команду.Когда есть только один пульт дистанционного управления, в котором одна из его ветвей отслеживания - «frotz», мы можем DWIM использовать его как запрос на создание локальной ветки «frotz» из соответствующей ветки отслеживания.

Это немного удивляет меня и не упоминается на справочной странице git checkout.

1 голос
/ 24 августа 2011

Ветви в Git являются только указателями (ссылками) на дерево коммитов, и каждый репозиторий имеет свой собственный набор ссылок.Если «branch1» появляется на GitHub , это просто означает, что на GitHub есть ссылка под названием «branch1», которая указывает на ваше дерево (на GitHub) (ему даже нужно указывать на тот же коммит).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...