Местное отделение удалено в github - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть локальная ветвь с именем mass-communication-rm, и я перенес код в эту ветку, но из-за какой-то проблемы я удалил эту ветку из локальной, и теперь я снова создал ветку с тем же именем, поэтому, если я добавлю код в эту ветку так что произойдет, если он создаст отдельную ветку или код будет перенесен в ту же ветку.

Ответы [ 4 ]

0 голосов
/ 01 сентября 2018

Для Git важны коммиты .

Чтобы действительно понять, что происходит, держите эти две идеи отдельно в своей голове:

  • У коммитов есть хэш-идентификаторы, например b7bd9486b055c3f967a870311e704e3bb0654e4f.
  • Ветвь Имена как master просто хранить один идентификатор хеша фиксации.

истинное имя любого коммита - это его необработанный хэш-идентификатор. Если у I есть коммит b7b<blah>, а у у вас есть коммит b7b<blah> (для того же ), мы имеем тот же коммит . Неважно, какое имя ветви или имена, которые мы используем для него, при условии, что ID совпадает.

Когда вы удаляете имя ветки в вашем Git, это почти все, что происходит: вы удалили name mass-communication-rm, которое ваш Git использовал для запоминания какого-то большого уродливого хеш-идентификатора. Давайте использовать буквы MCR для обозначения хэш-идентификатора. Поскольку вы успешно выполнили git push ранее, вы отправили коммит с идентификатором MCR в другой Git-репозиторий, и этот другой Git-репозиторий теперь имеет его. Пока они все еще имеют коммит MCR , вы всегда можете вызвать этот репозиторий Git и получить его обратно.

Теперь, когда вы дали им - Git на GitHub - коммит MCR , вы называли его mass-communication-rm. Вы, вероятно, сказали им назвать это mass-communication-rm. Помните, что их Git похож на ваш Git: у него свои имена веток. Как и в вашем Git, каждое из их имен ветвей запоминает один большой уродливый хэш-идентификатор.

Ваш Git также помнит, что его Git существует и имеет URL-адрес, который хранит ваш Git под удаленным именем origin. Ваш собственный Git запомнит их имен веток под вашими именами Git origin/*, которые ваш Git называет именами удаленного слежения . Это означает, что ваш Git имеет имя origin/mass-communication-rm, которое запоминает хеш-идентификатор коммита MCR ... поэтому ваш Git также все еще имеет имя для этого большого безобразного хеш-идентификатора!

Давайте рассмотрим:

  • Ваш Git запоминает URL своего Git через короткое имя origin (которое ваш Git называет remote ).
  • Вы дали им - GIt на GitHub, по этому URL - зафиксировали MCR и сказали им оставить его под своим именем mass-communication-rm.
  • Итак, ваш Git имеет origin/mass-communication-rm, который запоминает большой некрасивый хеш-идентификатор для коммита MCR .

Если вы запустите git branch -r (для получения списка имен удаленного отслеживания) или git branch -a (для отображения имен локальных филиалов и имен для удаленного отслеживания), вы увидите, что ваше mass-communication-rm ушел, но origin/mass-communication-rm все еще там. 1

Это, в свою очередь, означает, что вы можете запустить:

$ git checkout mass-communication-rm

до пересоздать ваше собственное локальное mass-communication-rm имя на основе origin/mass-communication-rm. То есть ваш Git создаст новое имя локальной ветки и добавит в это имя большой уродливый хеш-идентификатор, который ваш Git запоминает под именем origin/mass-communication-rm.

Затем вы можете добавлять новые коммиты. Добавление нового коммита в ветвь состоит из создания нового коммита (обычным способом), а затем наличия собственного Git-набора вашего имени ветки для запоминания нового уникального большого ugly-hash-ID, который ваш Git генерирует для этого нового коммита. Сам новый коммит запоминает предыдущий хэш-идентификатор; Ваше собственное имя ветки запоминает новый идентификатор, и ваш Git находит старый коммит - тот, который мы здесь называем MCR - путем поиска в обратном направлении из новый коммит.

Более подробно об этом, в том числе о другой роли, которую играют имена ветвей в поддержании коммитов "живыми", см. Думай как (а) Git .


1 Обратите внимание, что git branch -r печатает origin/mass-communication-rm, но git branch -a печатает remotes/origin/mass-communication-rm. полное имя refs/remotes/origin/mass-communication-rm. Полное название вашей собственной ветки: refs/heads/mass-communication-rm.

Git normally удаляет части refs/ и heads/ или remotes/ этих имен, поскольку они не очень полезны. По какой-то неизвестной причине git branch -a не снимает часть remotes/, в то время как git branch -r делает.

0 голосов
/ 01 сентября 2018

Вам не нужно создавать новую ветку с тем же именем. Просто оформить заказ в филиале:

git checkout mass-communication-rm

git достаточно умен, чтобы создать локальную ветку mass-communication-rm, если она существует только как удаленная ветка. Локальная ветка создается автоматически, и она будет отслеживать соответствующую удаленную ветку.

Это самый безопасный способ вернуть ту же ветку, которую вы удалили; AFAIK.

Я понимаю, что это не отвечает на ваш первоначальный вопрос, как в посте, но я думаю, что это отвечает основной причине, заставившей вас написать пост.

0 голосов
/ 01 сентября 2018

Github попытается отправить изменения в ту же ветку. Будет ли это или нет, это зависит. Если ваш новый локальный филиал имеет тот же код, что и онлайн, Githhub позволит вам вносить новые изменения. В противном случае будет отображаться сообщение «1001 *».

Обновления были отклонены, потому что на пульте есть работа, которой у вас нет

Решение: 1

Лучшим решением было бы удалить вашу локальную ветку, используя:

git branch -D mass-communication-rm

Примечание: Будет удален весь код в локальной ветке mass-communication-rm

Теперь загрузите онлайн-ветку, используя

git fetch origin mass-communication-rm

Оформить заказ на эту ветку

git checkout mass-communication-rm

Продолжайте работу ...

Решение: 2

Другое решение может заключаться в подключении к ветке mass-communication-rm . Он объединит онлайн-ветку с вашей локальной и затем попытается нажать. Это будет работать.

Ура!

0 голосов
/ 01 сентября 2018

Как вы сказали, вы удалили эту ветку из локальной, а не удаленной. Теперь перепишите его и попробуйте нажать, оно будет объединено с той же удаленной веткой.

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