Что это значит
Ваш апстрим - удаленный, origin
которому вы звоните, - больше не имеет или, возможно, никогда не имел (невозможно узнать по этой информации) ветку с именем feature/Sprint4/ABC-123-Branch
. Для этого есть одна частая причина: кто-то (возможно, не вы, или вы помните) удалил ветку в этом другом Git-репозитории.
Что делать
Это зависит от того, что вы хотите . Смотрите раздел обсуждения ниже. Ты можешь:
- создать или заново создать ветку на пульте, или
- удалите свое местное отделение, или
- все, что вы можете придумать.
обсуждение
Вы должны быть запущены git pull
(если бы вы работали, git merge
вы бы получили другое сообщение об ошибке или вообще никакого сообщения об ошибке).
Когда вы запускаете git fetch
, ваш Git связывается с другим Git, основываясь на url
строке в [remote "origin"]
разделе вашей конфигурации. Этот Git запускает команду ( upload-pack
), которая, помимо прочего, отправляет вашему Git список всех ветвей. Вы можете использовать, git ls-remote
чтобы увидеть, как это работает (попробуйте, это образовательный). Вот фрагмент того, что я получаю при запуске этого для Git-репозитория для git
себя:
$ git ls-remote origin
From [url]
bbc61680168542cf6fd3ae637bde395c73b76f0f HEAD
60115f54bda3a127ed3cc8ffc6ab6c771cbceb1b refs/heads/maint
bbc61680168542cf6fd3ae637bde395c73b76f0f refs/heads/master
5ace31314f460db9aef2f1e2e1bd58016b1541f1 refs/heads/next
9e085c5399f8c1883cc8cdf175b107a4959d8fa6 refs/heads/pu
dd9985bd6dca5602cb461c4b4987466fa2f31638 refs/heads/todo
[snip]
В refs/heads/
списке всех ветвей , которые существуют на пульте дистанционного управления записью, 1 вместе с соответствующей фиксацией идентификаторов (для refs/tags/
записи идентификаторов могут указывать на объекты тег , а не фиксации).
Ваш Git берет каждое из этих названий веток и меняет его в соответствии со fetch
строками в этом же remote
разделе. В этом случае ваш Git заменяет refs/heads/master
с refs/remotes/origin/master
, например. Ваш Git делает это с каждым встречающимся именем ветви.
Он также записывает оригинальные имена в специальный файл FETCH_HEAD
(вы можете увидеть этот файл, если загляните в свой собственный .git
каталог). Этот файл сохраняет выбранные имена и идентификаторы.
Эта git pull
команда предназначена для удобства: она выполняется git fetch
на соответствующем удаленном устройстве, а затем git merge
(или, если это указано в инструкции git rebase
) с любыми аргументами, необходимыми для объединения (или перебазировки), как указано в [branch ...]
разделе. В этом случае ваш [branch "feature/Sprint4/ABC-123-Branch"]
раздел говорит, что нужно извлечь origin
, а затем объединить с любым идентификатором, найденным под именем refs/heads/feature/Sprint4/ABC-123-Branch
.
Поскольку под этим именем ничего не найдено, git pull
жалуется и останавливается.
Если вы выполняете это как два отдельных шага, git fetch
а затем git merge
(или git rebase
), ваш Git будет смотреть на ваши кэшированные remotes/origin/
ветки удаленного отслеживания, чтобы увидеть, что объединить или перебазировать. Если когда-то была такая ветвь, у вас все еще может быть ветка удаленного отслеживания. В этом случае вы не получите сообщение об ошибке. Если такой ветки никогда не было или вы работали git fetch
с --prune
(которая удаляет мертвые ветки удаленного отслеживания), так что у вас нет соответствующей ветки удаленного отслеживания, вы получите жалобу, но origin/feature/Sprint4/ABC-123-Branch
вместо этого будет указана ссылка .
В любом случае , мы можем заключить, что feature/Sprint4/ABC-123-Branch
не существует в настоящее время на удаленном имени origin
.
Возможно, он существовал когда-то, и вы, вероятно, создали свою локальную ветку из ветви удаленного отслеживания. Если это так, у вас, вероятно, все еще есть ветка удаленного отслеживания. Вы можете выяснить, кто удалил ветку с пульта и почему, или вы можете просто нажать что-то, чтобы воссоздать ее, или удалить ветку удаленного отслеживания и / или вашу локальную ветку.
+1 Ну, все, что он собирается признать , по крайней мере. Но если они специально не спрятали некоторые ссылки, список включает в себя все.
Edit, Jul 2020: есть новый протокол выборки, который может избежать перечисления всего , и только перечислять имена, которые, как говорит ваш Git, он ищет. Это может помочь с репозиториями, которые имеют огромное количество веток и / или тегов. Однако, если ваш Git интересуется всеми возможными именами, вы все равно получите все имена здесь.