Computer screen displays "vibe vibe coding" text.

Apps

VS Code Añade "Co-Authored-by Copilot" a Cada Commit

La extensión Copilot de VS Code inyecta silenciosamente un trailer Co-Authored-by en tus commits, incluso cuando escribiste cada línea tú mismo. Aquí te explicamos exactamente cómo detenerlo.

TLDR La extensión Copilot de VS Code añade automáticamente un trailer Co-authored-by: GitHub Copilot a los mensajes de commit cuando participa en su generación — y a veces incluso cuando no lo hace. Esto afecta los registros de atribución, el historial de contribuciones en proyectos de código abierto y, potencialmente, las políticas de propiedad intelectual de los empleadores. Puedes neutralizarlo con un git hook, un cambio en la configuración de VS Code, o una regla global en gitconfig — cada opción con sus propias ventajas y desventajas.

Si has echado un vistazo reciente a tu git log y has notado una línea desconocida al final de mensajes de commit que escribiste completamente tú solo, no estás imaginándolo. GitHub Copilot — o más concretamente, la extensión Copilot de VS Code — ha estado estampando su nombre en los commits como coautor, independientemente de si tocó una sola línea en ese push. No es ninguna conspiración; es un sistema de atribución activo por defecto del que la mayoría de los desarrolladores nunca aceptaron conscientemente. A continuación encontrarás un desglose preciso de cómo funciona la inyección, por qué GitHub lo diseñó así y, lo más útil, exactamente qué configuraciones, hooks y configs harán que se detenga.

Panel de control de código fuente de VS Code mostrando la generación de mensajes de commit con Copilot


Cómo es el Trailer en la Práctica

Antes de solucionar nada, conviene saber exactamente con qué se está tratando. El texto inyectado es un trailer de commit git estándar — un par clave-valor añadido tras una línea en blanco al final del cuerpo del mensaje de commit. Sigue el mismo formato que usa git interpret-trailers y herramientas como Gerrit y la propia infraestructura de merge de GitHub:

feat: add user authentication flow

Implement JWT-based login with refresh token rotation.

Co-authored-by: GitHub Copilot <github-copilot[bot]@users.noreply.github.com>

Esa última línea es lo que inyecta Copilot. La dirección de correo github-copilot[bot]@users.noreply.github.com es una cuenta bot real de GitHub, lo que significa que el motor de atribución de commits y el gráfico de contribuciones de GitHub registran esto como una coautoría real — no un comentario, no metadatos que puedas ignorar. Es un objeto git de primera clase incrustado permanentemente en tu historial una vez que lo subes.

Dónde Aparece

  • Vista de commit de GitHub: el commit mostrará una insignia "Co-authored by GitHub Copilot" junto a tu avatar.
  • git log --format=full: el trailer aparece en el cuerpo completo del commit.
  • git shortlog: según el parseo, Copilot puede aparecer como colaborador en las estadísticas del proyecto.
  • Gráfico de contribuciones de GitHub: la cuenta bot puede registrarse como colaboradora en tu repositorio.
Warning Una vez que hayas subido un commit que contiene este trailer a un remoto compartido, reescribir el historial (mediante git rebase -i o git filter-branch) para eliminarlo es una operación destructiva que requerirá un force-push y romperá los historiales locales de tus compañeros. Prevenir es considerablemente más fácil que remediar.

En Qué Commit Aparece con Mayor Frecuencia

La inyección es más agresiva cuando usas la función Generar mensaje de commit de VS Code — el ícono de destello (✨) en la barra lateral de Control de código fuente. Al hacer clic, Copilot redacta un mensaje y el trailer de coautoría viene incluido antes de que confirmes nada. Pero desarrolladores han reportado que también aparece en commits donde el mensaje fue escrito manualmente, especialmente si Copilot Chat estaba activo en esa sesión y se había usado para generar cualquier código en los archivos preparados para el commit.


El Mecanismo Detrás de la Inyección

La extensión Copilot de VS Code se integra con la API del gestor de control de código fuente (SCM) de VS Code a bajo nivel. Cuando preparas archivos y abres el cuadro de entrada del mensaje de commit, Copilot se registra como proveedor del cuadro de entrada SCM y puede rellenar previamente o modificar ese campo de texto — incluyendo añadir trailers mediante programación antes de que escribas un solo carácter.

No es una función rogue. Es un comportamiento documentado vinculado a la filosofía de atribución de IA de GitHub: si un modelo de IA contribuyó sustancialmente a un trabajo, GitHub considera que esa contribución debe quedar registrada. El problema está en la ejecución: "contribuyó sustancialmente" ha sido interpretado de forma muy amplia por la extensión, y la UX para desactivarlo está enterrada a varios menús de profundidad en lugar de presentarse como un aviso prominente en el primer uso.

Cómo lo Permite la API SCM de VS Code

VS Code expone vscode.scm.inputBox y APIs relacionadas a las que las extensiones pueden engancharse. La extensión Copilot usa esto para:

  1. Observar qué archivos están preparados y sus diffs.
  2. Determinar si Copilot fue invocado (o simplemente estaba activo) durante la edición de esos archivos.
  3. Generar un mensaje de commit a través de la API de Copilot.
  4. Inyectar el mensaje — incluyendo el trailer — en el campo de entrada del commit antes de enviarlo.

La inyección ocurre en el lado del cliente en VS Code, no en los servidores de GitHub, lo que significa que las reglas del lado del servidor o las protecciones de ramas no pueden interceptarla antes de que entre en tu historial.

Info Este comportamiento es distinto de la atribución Copilot del lado del servidor de GitHub para pull requests. Lo que hace la extensión de VS Code es una inyección de texto en el lado del cliente en el campo del mensaje de commit — una ruta de código completamente diferente.

¿Ocurre Sin Usar la Función de Generación?

Sí — y esta es la parte que más frustra a los desarrolladores. Los usuarios reportan que el trailer aparece incluso cuando:

  • Escribieron el mensaje de commit manualmente (sin usar el botón del destello).
  • Los cambios preparados fueron escritos 100% a mano.
  • Copilot Chat estaba abierto pero no fue consultado para la tarea actual.

La heurística de la extensión para determinar que "Copilot estuvo involucrado" es laxa. Si Copilot estaba activo durante la sesión de edición de cualquier archivo en el diff — aunque hayas rechazado todas las sugerencias — aún puede añadir el trailer. Este es el núcleo de la queja: no es atribución por una contribución real de IA, es atribución por proximidad.


Por Qué Importa Más Allá de lo Estético

Un coautor fantasma en tu git log puede parecer una molestia cosmética, pero hay consecuencias reales que vale la pena entender antes de decidir con qué urgencia actuar.

Desarrollador revisando git log en terminal mostrando commits con coautoría

Propiedad Intelectual y Políticas de los Empleadores

Muchos empleadores — especialmente en sectores regulados como las finanzas, la sanidad y la defensa — tienen políticas explícitas de propiedad intelectual sobre el código generado por IA. Una línea Co-authored-by: GitHub Copilot en un commit de una base de código propietaria es un registro documentado de que se utilizaron herramientas de IA en la creación de ese código. Aunque Copilot solo haya autocompletado un paréntesis de cierre, ese trailer crea una trazabilidad que los equipos legales pueden necesitar gestionar.

Si tu empresa no ha aprobado explícitamente el uso de Copilot para código en producción, ese trailer es una responsabilidad que no asumiste voluntariamente.

Implicaciones en las Licencias de Código Abierto

El estatus legal del código generado por IA y su compatibilidad con las licencias copyleft (GPL, AGPL) sigue sin resolverse. Los proyectos con políticas de contribución estrictas pueden rechazar o exigir reescrituras del historial de commits que incluyan atribución de Copilot — la FSF y otras organizaciones han publicado posiciones al respecto. Si mantienes un proyecto de código abierto con colaboradores que esperan una procedencia limpia, los trailers de Copilot en tu historial lo complican.

Estadísticas de Contribuidores y Portfolios Profesionales

Los perfiles de GitHub y los gráficos de contribuciones se usan cada vez más como portfolios informales — por reclutadores, posibles colaboradores y comités de conferencias. Tener un bot listado como coautor en commits de tus repositorios públicos enturbia la señal de atribución que esos gráficos pretenden transmitir. Es algo pequeño, pero es tu historial.

Warning Si eres freelance o consultor y tus clientes revisan tu historial git como parte de la aceptación de entregables, la atribución de Copilot en repositorios propiedad del cliente podría generar preguntas contractuales que preferirías evitar.

Cuatro Formas de Detenerlo

No existe una solución única que funcione para todos los flujos de trabajo. El enfoque correcto depende de si quieres una solución global, una configuración por repositorio, o algo que conserve la generación de mensajes de commit de Copilot pero elimine únicamente el trailer.

Opción 1 — Configuración de la Extensión en VS Code

La vía más directa es desactivar el comportamiento desde la configuración de VS Code. Abre la configuración (Ctrl+, o Cmd+,) y busca "copilot commit". Busca las opciones bajo la extensión GitHub Copilot relacionadas con la generación de mensajes de commit y la atribución de coautoría.

En settings.json, la ruta de configuración relevante es la siguiente:

{
  "github.copilot.chat.generateCommitMessage.enabled": false
}

Desactivar la generación de mensajes de commit por completo detiene la inyección desde el origen — Copilot no rellenará el campo de entrada del commit, por lo que no hay oportunidad de añadir el trailer. Si aún quieres mensajes de commit asistidos por IA pero sin la línea de atribución, algunas versiones de la extensión exponen un toggle independiente específicamente para el trailer de coautoría. Ve a Extensiones > GitHub Copilot > Configuración en la barra lateral de VS Code para comprobar qué opciones están disponibles en tu versión instalada, ya que los nombres exactos de los ajustes han cambiado entre versiones de la extensión.

Tip La interfaz de configuración de VS Code te mostrará la versión actual de la extensión junto a sus ajustes. Si tienes una versión antigua de Copilot, actualizar la extensión puede darte controles más precisos sobre el comportamiento de atribución — Microsoft ha respondido a los comentarios de la comunidad al respecto.

Opción 2 — Git Hook (La Más Fiable)

Un hook prepare-commit-msg se ejecuta automáticamente antes de que se abra el editor de mensajes de commit, y puede eliminar quirúrgicamente el trailer de Copilot independientemente de cómo haya llegado ahí. Este enfoque funciona de forma independiente a VS Code, sobrevive a las actualizaciones de la extensión y se aplica a cualquier cliente git que uses en el repositorio.

Crea el archivo del hook en .git/hooks/prepare-commit-msg:

#!/bin/sh
# Strip GitHub Copilot co-author trailer from commit messages
sed -i '/^Co-authored-by: GitHub Copilot/Id' "$1"

Luego hazlo ejecutable:

chmod +x .git/hooks/prepare-commit-msg

Para una solución a nivel de equipo, usa un directorio de hooks compartido incluido en el repositorio y configura git para usarlo:

# In .gitconfig or the repo's local config
git config core.hooksPath .githooks

Luego confirma tu hook en .githooks/prepare-commit-msg con el mismo contenido de arriba. Todos los desarrolladores que clonen el repositorio y ejecuten git config core.hooksPath .githooks (o si lo automatizas en un script de configuración) tendrán el comportamiento de eliminación aplicado.

Info El flag -i en sed edita el archivo en su lugar. En macOS, el sed de BSD requiere una extensión de copia de seguridad explícita: sed -i '' '/^Co-authored-by: GitHub Copilot/Id' "$1". Añade una condicional de shell si tu equipo usa tanto Linux como macOS.

Opción 3 — Desactivar Copilot por Área de Trabajo

Si tu preocupación es específica de un repositorio (por ejemplo, un proyecto de cliente o un repositorio de código abierto con reglas de procedencia estrictas), puedes desactivar Copilot completamente para ese área de trabajo sin tocar tu configuración global. En la raíz del repositorio, crea o edita .vscode/settings.json:

{
  "github.copilot.enable": {
    "*": false
  }
}

Esto desactiva todas las funciones de Copilot — sugerencias, chat y generación de mensajes de commit — únicamente en ese área de trabajo. Cuando cambias a un proyecto personal, Copilot funciona con normalidad. La desventaja es que pierdes toda la asistencia de Copilot en ese repositorio, no solo la inyección del coautor.

Opción 4 — Regla de Limpieza Global en gitconfig

Si ves que el trailer se cuela en commits desde múltiples herramientas y entornos (no solo VS Code), un hook prepare-commit-msg global en el directorio de plantillas git de tu directorio home lo cubre todo:

# Set a global hooks template directory
git config --global init.templateDir ~/.git-templates

# Create the directory and hook
mkdir -p ~/.git-templates/hooks
cat > ~/.git-templates/hooks/prepare-commit-msg << 'EOF'
#!/bin/sh
sed -i '/^Co-authored-by: GitHub Copilot/Id' "$1"
EOF
chmod +x ~/.git-templates/hooks/prepare-commit-msg

Cualquier repositorio nuevo que inicialices o clones a partir de este momento heredará este hook automáticamente. Para los repositorios existentes, ejecuta git init en la raíz del repositorio — es seguro en repos existentes y copiará los hooks de la plantilla sin tocar tu historial.


Comparativa de las Opciones

Método Alcance Elimina el trailer Conserva las sugerencias Compartible en equipo Sobrevive actualizaciones
Ajuste de VS Code (desact. generación) Global o área de trabajo No Mediante commit de settings.json
Hook prepare-commit-msg (local) Por repositorio Mediante patrón .githooks/
Desactivar área de trabajo (copilot.enable) Por repositorio No Mediante .vscode/settings.json
Hook de plantilla git global Todos los repos (nuevos y futuros) No (nivel de usuario)
Desactivar la extensión Copilot por completo Global No N/A N/A

Mejor para personas que quieren conservar las sugerencias de Copilot: hook prepare-commit-msg + plantilla global.

Mejor para equipos con políticas compartidas: directorio .githooks/ incluido en el repositorio con documentación de configuración.

Mejor para repositorios de clientes sensibles: copilot.enable: false a nivel de área de trabajo, confirmado en .vscode/settings.json.


Limpiar Commits que Ya lo Tienen

Si ya has subido commits con el trailer de Copilot a un repositorio privado y quieres limpiar el historial, la operación requiere una reescritura forzada. Haz esto solo en ramas donde seas el único colaborador y entiendas las consecuencias de cambiar los SHAs de los commits.

# Interactive rebase to edit recent commits
git rebase -i HEAD~10

# For each offending commit, mark it 'reword' then remove the trailer line
# Or use filter-branch for bulk cleaning:
git filter-branch --msg-filter \
  'sed "/^Co-authored-by: GitHub Copilot/Id"' \
  HEAD~20..HEAD

Tras la reescritura, necesitarás hacer un force-push:

git push --force-with-lease origin your-branch
Warning --force-with-lease es más seguro que --force porque se negará a hacer push si alguien más ha subido cambios a la rama desde tu último fetch. No protege las ramas públicas compartidas — coordina con tu equipo antes de hacer esto en cualquier cosa que no sea una rama de función personal.

Para repositorios ya subidos a GitHub público donde no quieres reescribir el historial, la respuesta pragmática es: documenta la situación en el archivo CONTRIBUTING de tu proyecto, añade un hook de aquí en adelante y acepta que los commits antiguos son lo que son. Las reescrituras de historial en repositorios públicos activos causan más problemas de los que resuelven.

Configuración del repositorio de GitHub mostrando las reglas de protección de ramas


Lista de Verificación Rápida

Sigue estos pasos en orden según tu situación:

  1. Confirma que estás viendo el trailer: ejecuta git log --format=full -5 y comprueba si hay Co-authored-by: GitHub Copilot al final del cuerpo de algún commit.
  2. Instala el hook prepare-commit-msg en el repositorio afectado — es la solución de menor fricción y mayor fiabilidad.
  3. Revisa tu configuración de Copilot en VS Code: abre la configuración, busca "copilot commit" y desactiva la generación de mensajes de commit si no usas el botón del destello.
  4. Para repositorios sensibles: añade un .vscode/settings.json que desactive Copilot para ese área de trabajo y confírmalo para que tus compañeros hereden la configuración.
  5. Para entornos de equipo: crea un directorio .githooks/, añade el script prepare-commit-msg, confírmalo y añade git config core.hooksPath .githooks a las instrucciones de configuración del proyecto o al Makefile.
  6. Configura la plantilla git global si trabajas en muchos repositorios personales y quieres una cobertura de configuración única y definitiva.
  7. Audita los commits recientes en ramas compartidas: usa git log --grep="Co-authored-by: GitHub Copilot" --oneline para encontrar los commits afectados antes de decidir si la limpieza del historial está justificada.
  8. Verifica que la solución funciona: prepara un archivo, deja que VS Code abra el diálogo de commit y comprueba que el trailer está ausente antes de confirmar el commit.

Fuentes y Lecturas Adicionales

  • GitHub Docs — Commit Trailer Attribution — Documentación oficial de GitHub sobre cómo funcionan los trailers de coautoría dentro del gráfico de contribuciones de GitHub y qué significa el formato Co-authored-by para las estadísticas del repositorio y la atribución en pull requests.

  • Registro de cambios de la extensión GitHub Copilot para VS Code (marketplace.visualstudio.com) — Las notas de versión de la extensión Copilot documentan cuándo se introdujo la generación de mensajes de commit y los cambios posteriores en el comportamiento de atribución; busca versiones desde finales de 2023 en adelante.

  • git-scm.com — Documentación de githooks — La referencia definitiva para el hook prepare-commit-msg, su contexto de invocación, argumentos y cómo interactúa con el proceso de commit en diferentes clientes git.

  • Software Freedom Conservancy — Copyleft y código generado por IA — El análisis publicado por la SFC sobre cómo interactúan los resultados de los modelos de IA con las obligaciones de licenciamiento GPL y AGPL, relevante para los mantenedores de código abierto que deciden cómo gestionar la atribución de Copilot en sus proyectos.

  • Foro de la comunidad de GitHub — "Copilot añadiendo Co-authored-by sin mi intervención" — Hilos de debate de desarrolladores que documentan casos reales del comportamiento de inyección, soluciones confirmadas por usuarios y respuestas del personal de GitHub sobre el diseño previsto frente a los casos extremos reportados.