¿Hay alguna manera de omitir el gancho de git posterior a la fusión al ejecutar el comando `git merge`?

3 minutos de lectura

Tengo configurado un gancho posterior a la fusión para integrarlo (semimanualmente) con otro sistema de control de versiones. Sin embargo, a veces me gustaría evitar que el gancho se ejecute. ¿Hay alguna forma de evitarlo? git merge?

sabia que hay --no-verify parámetro de línea de comando para git commit. Ese tipo de solución sería perfecta para mi caso de uso, pero parece --no-verify no esta trabajando para git commit dominio.

  • Parece que estás en el camino correcto con --no-verifyqv esta publicación SO.

    – Tim Biegeleisen

    30 de octubre de 2015 a las 6:24

avatar de usuario de godblessstrawberry
dios bendigafresa

para los que vinieron aquí porque git merge --no-verify --continue no funciona en conjunto: puede deshabilitar los ganchos temporalmente para la fusión; por ejemplo, para mi proyecto de reacción actual, acabo de eliminar esta parte de mi package.json – como archivo no preparado, no entrará en la confirmación de fusión

  "husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  },
  "lint-staged": {
    "*.{js,ts,tsx}": [
      "eslint --fix --rule '@typescript-eslint/no-non-null-assertion: error'",
      "prettier --write"
    ],
    "*.css": [
      "stylelint --fix",
      "prettier --write"
    ],
    "*.{json,yml,md,eslintrc,stylelintrc,babelrc}": [
      "prettier --write"
    ]
  },

  • si alguien está usando pre-committuve que habilitar ganchos inocuos, de lo contrario, la confirmación previa se quejó de un no válido y la fusión fallaría.

    – Mattwmaster58

    2 de mayo a las 13:30

Puede deshabilitar temporalmente los git hooks haciendo lo siguiente:

$ git config core.hooksPath # to see the current value
$ git config core.hooksPath '/dev/null'
$ git merge --continue
$ git config core.hooksPath '/value/you/had/before'

Adaptado de esta útil respuesta.

  • ¡Gracias! Después de la merge --continue tuve ese uso git config --unset core.hooksPath porque mi hooksPath primero no devolvió nada. Podrías agregar esto a tu respuesta.

    – Ramón Días

    6 ago 2022 a las 20:44


No hay una bandera para deshabilitar la ejecución de un enlace posterior a la combinación, pero puede manipular fácilmente su propio enlace posterior a la combinación (que controla por completo, ya que está en su propio repositorio) para obedecer una variable de entorno. Por ejemplo, un script de shell podría comenzar con:

#! /bin/sh
warn() {
    echo "warning: $1" 1>&2
}
case ${SKIP_POST_MERGE_HOOK:-no} in
yes) exit 0;;
no) ;;
*) warn "mystery value ${SKIP_POST_MERGE_HOOK} for SKIP_POST_MERGE_HOOK";;
esac
... rest of code as usual ...

Ahora si quieres correr git merge pero pasa por alto el gancho (o ejecuta algo como el git pull script de conveniencia que se ejecuta git merge para usted), simplemente configure SKIP_POST_MERGE_HOOK=yes por la duración:

$ SKIP_POST_MERGE_HOOK=yes git merge ...

Un enfoque simple (sin tener que alterar los archivos de configuración) que funcionó para mí es:

  1. git merge main
  2. Solucionar conflictos de fusión, si los hay
  3. git add .
  4. git commit --no-verify
  5. git push

Este es un ejemplo, por lo que definitivamente puede especificar qué archivos agregar y agregar un mensaje de confirmación también. Me enfrenté al mismo problema que el OP al intentar git merge --continue.

versión de git: 2.35.1

He hecho el truco usando el GIT_REFLOG_ACTION Variable ambiental.

Cuando usas git pullencontrarás que GIT_REFLOG_ACTION=pull en tu gancho de git.

Por lo tanto, puede hacer algo como lo siguiente:

# if git pull, abort
if [[ $GIT_REFLOG_ACTION == "pull" ]]; then
  echo "git pull detected, aborting"
  exit 0
fi

¡Espero que esto pueda ayudar!

¿Ha sido útil esta solución?