Por la situación que describes creo que has realizado una acción desaconsejada en tu servidor. Si en tu servidor se ha modificado composer.lock es que debes haber ejecutado el "composer update", inadecuadamente. Me explico.
En el servidor remoto, producción, no se debe ejecutar el comando "composer update". Este comando se encarga de actualizar todas las dependencias a los números de versión posibles más nuevos. Como resultado de este comando las dependencias se actualizan y también se actualiza el archivo composer.lock, definiendo las versiones exactas de todas las dependencias que se están instalando. Ese archivo composer.lock nunca debería escribirse en el servidor en producción.
Por tanto, el comando composer update sólo se debe ejecutar en tu ordenador de desarrollo. Al subirse el proyecto, el composer.lock se subirá informando al servidor de las versiones concretas que se han instalado sobre las dependencias.
En cambio, en el servidor en producción siempre se tiene que instalar las dependencias con:
composer install
Este comando "composer install" se apoya en composer.lock para instalar lo que realmente se necesita y tal como está en el ordenador de desarrollo. Además, composer install nunca modifica el composer.lock, por lo que no te debería dar problemas como el que describes cuando actualizas el código del proyecto a las nuevas versiones con "git pull".
Este comportamiento es perfectamente normal, ya que hacer un "composer update" es un proceso muy costoso en términos de CPU y RAM y es muy normal que el servidor falle al ejecutarse, porque suelen estar bastante limitados de recursos. Pero realmente este no sería el único motivo de no hacer el "composer update", sino básicamente también porque no deberían actualizarse las dependencias en remoto, sino primero en local y, comprobando que funciona todo bien, lo normal sería instalarlo en remoto más tarde.
En resumen, el composer.lock nos ayuda a fijar las versiones que tenemos de las dependencias, en todas las instalaciones del proyecto, por lo que no se debería modificar en el servidor en producción, sino solamente en el ordenador de desarrollo.
Ya para solucionar tu problema la idea sería:
- Hacer el checkout del composer.lock, para descartar todos los cambios realizados.
- Hacer el pull del repositorio
- Instalar las dependencias con "composer install"
Los comandos serían los siguientes:
sudo git checkout -- composer.lock
sudo git pull
composer install