У нас есть удаленное git-репо, которое мы обычно развертываем, используя его git push
на нашем dev-сервере, а затем git pull
на наших живых серверах, чтобы получить самую последнюю версию репо.
Но если мы зафиксировали и выдвинули несколько ревизий (без « git pull
на» на живых серверах), как мы можем сделать то, git pull
что ссылается на старую фиксацию, которую мы хотим?
то есть что-то вроде git pull -r 3ef0dedda699f56dc1062b5dcc2c59f7ad93ede4
git pull server:repo
git pull
uploadpack.allowReachableSHA1InWant
Начиная с Git 2.5.0, эта переменная конфигурации может быть включена на сервере, здесь запрос функции GitHub и фиксация GitHub включают эту функцию .
Bitbucket Server включил его начиная с версии 5.5+ .
Использование:
источник
Если какой-то процесс на вашем действующем сервере немедленно получает доступ к только что извлеченному контенту (т.е. вы не можете работать с ним
git checkout 3ef0d
после извлечения), вам следует подумать о том, чтобы пометить версию, которую вы хотите развернуть в рабочей среде, и, в частности, получить эту метку в рабочей среде, чтобы вытягивание не происходило немедленно. измените свой рабочий каталог. В противном случае вы рискуете кого-то толкать как раз перед вашим натяжением.источник
Обратите внимание, что
git pull git checkout my-old-commit
теперь a оставляет вас в состоянии DETACHED HEAD - фактически вы отправляете будущие коммиты в этом хранилище по новому пути коммитов. Для репозитория развертывания это не является серьезной проблемой, поскольку единственными коммитами должны быть коммиты, уже зафиксированные правильно перед извлечением.Однако иногда полезно проверить, что маркеры фиксации (заголовок, теги, пульты) выглядят идентично главному репо. Чтобы исправить это, выполните следующие действия:
git reset
- повторно подключите головкуgit fetch
- синхронизируйте маркеры для удаленных устройств [это может зависеть от версии git - по общему признанию, наша среда все еще на 1.7 ... так что, возможно, больше не требуется YMMV]источник