Убедитесь, что у вас нет ветки pr22
, 1 , затем запустите тот же git fetch
. (Затем вы можете git checkout
ветвь снова, если хотите.)
Если они имеют только добавленные коммиты, все будет работать нормально. Если они заменили коммитов (взяли некоторые, вместо них вставили несколько других), например, после ребазирования, вы получите ошибку «не-перемотка вперед».
Если Вы хотели бы выбросить свое старое значение pr22
и сохранить новый обновленный совет в любом случае, просто принудительно обновите выборку, несмотря на условие отсутствия быстрой перемотки вперед. Для принудительной выборки вы можете использовать git fetch --force
- это говорит git fetch
, чтобы установить флаг принудительной установки при каждом обновлении refname, или использовать знак плюс +
в указанном c refspe. c содержит ссылку, которую вы можете sh заставить:
git fetch origin +refs/pull/22/head:refs/heads/pr22
(В этом случае есть только один refspe c, 2 , поэтому +
и --force
сделайте то же самое. Здесь я полностью изложил обе ссылки в одной ссылке c. Как вы видели, вы можете сокращать ссылки в общих случаях. Изложение их полностью в сценариях целесообразно, так как Git будет преобразовывать частичные ссылки в полные удивительными способами, иногда.)
1 Например, запустите git checkout master
, чтобы переключиться, или просто используйте git checkout --detach
, чтобы войти в режим "detached HEAD" на текущем коммите. Любой из них позволяет избежать ловушек, в которых присутствует «обновление моего текущего имени ветви».
2 A refspe c - это, примерно, пара ссылки или ссылаются на с двоеточием между ними: pull/22/head:pr22
является примером refspe c. Приставка refspe c со знаком плюс делает принудительное обновление . Подробнее об этом см. git fetch
документация и git push
документация .
A ref - это любое имя ветви, подобное master
, имя тега, например v2.1
, имя удаленного отслеживания, например origin/master
, или любое другое имя. Все из этих имен, в Git, являются refs . имя ветви - это просто ссылка, полное имя которой начинается с refs/heads/
, а имя тега - это просто ссылка, полное имя которой начинается с refs/tags/
. Git обычно сокращает эти ссылки, удаляя часть refs/heads/
или refs/tags/
для удобства.
Когда вы используете сокращенную форму, Git должен угадать, каким должно быть полное имя. Если у вас есть ветвь с именем master
и тег с именем master
, Git сначала будет угадывать «тег» - так что не делайте этого и в сценариях , напиши полное имя.