как обновить / синхронизировать c запрос на удаление? - PullRequest
0 голосов
/ 09 февраля 2020

На моем локальном компьютере я клонировал репозиторий, используя следующую команду:

git clone https://github.com/kp/ml_project.git

Теперь в исходном проекте был сделан запрос на получение, и его номер запроса на получение равен 22. Поэтому я добавил запрос на получение, используя следующие команды.

cd ml_project
git fetch origin pull/22/head:pr22

Теперь, после нескольких дней в запросе на получение 22, были добавлены новые коммиты, и я хочу, чтобы они были доступны для меня. Что я могу сделать? Как я могу обновить / загрузить новые коммиты в мою ветку pr22

1 Ответ

1 голос
/ 09 февраля 2020

Убедитесь, что у вас нет ветки 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 сначала будет угадывать «тег» - так что не делайте этого и в сценариях , напиши полное имя.

...