Tenemos un repositorio de git remoto que normalmente implementamos desde git push
nuestro servidor de desarrollo y luego git pull
en nuestros servidores en vivo para obtener la última versión del repositorio.
Pero si nos hemos comprometido e impulsado algunas revisiones (sin un git pull
servidor en vivo), ¿cómo podemos hacer una git pull
referencia al compromiso más antiguo que queremos?
es decir, algo como git pull -r 3ef0dedda699f56dc1062b5dcc2c59f7ad93ede4
git pull server:repo
frente a los regularesgit pull
)uploadpack.allowReachableSHA1InWant
Desde Git 2.5.0, esta variable de configuración se puede habilitar en el servidor, aquí la solicitud de la función GitHub y la confirmación de GitHub habilitan esta función .
Bitbucket Server lo habilitó desde la versión 5.5+ .
Uso:
fuente
Si algún proceso en su servidor en vivo accede de inmediato al contenido extraído (es decir, no puede trabajar
git checkout 3ef0d
después de extraerlo), debería considerar etiquetar la versión que desea implementar en producción y específicamente retirar esa etiqueta en producción, de modo que la extracción no se realice inmediatamente cambia tu directorio de trabajo. De lo contrario, correría el riesgo de que alguien empuje justo antes de tirar.fuente
Tenga en cuenta que un
git pull git checkout my-old-commit
ahora lo deja en un estado HEAD DESCONECTADO: efectivamente está enviando confirmaciones futuras en este repositorio por una nueva ruta de confirmación. Para un repositorio de implementación, este no es un problema importante, ya que las únicas confirmaciones deben ser las que ya se hayan confirmado correctamente antes de ser retiradas.Sin embargo, a veces es útil verificar que los marcadores de confirmación (encabezado, etiquetas, controles remotos) se vean idénticos al repositorio principal. Para solucionar esto después de su pago:
git reset
- vuelve a colocar la cabezagit fetch
- sincroniza los marcadores de los controles remotos [esto puede depender de la versión de git - es cierto que nuestro entorno todavía está en 1.7 ... por lo que ya no será necesario YMMV]fuente