Skip to main content

Inserción de una rama bloqueada por la protección de inserción

La protección de inserción lo protege proactivamente frente a secretos filtrados en los repositorios. Puedes resolver las inserciones bloqueadas y, una vez que se ha quitado el secreto detectado, puedes insertar los cambios en la rama de trabajo desde la línea de comandos o la interfaz de usuario web.

¿Quién puede utilizar esta característica?

La protección de inserción para usuarios está habilitada de manera predeterminada y se puede inhabilitar en las configuraciones de su cuenta personal.

La protección de inserción para repositorios y organizaciones está disponible de forma gratuita en todos los repositorios públicos propiedad del usuario . Las organizaciones que usan GitHub Enterprise Cloud con una licencia de GitHub Advanced Security también pueden habilitar la protección de inserción en sus repositorios privados e internos.

Para obtener más información, consulte "Protección de inserción para usuarios" y "Protección contra el envío de cambios para repositorios y organizaciones."

Acerca de la protección de inserción

La protección de inserción ayuda a evitar pérdidas de seguridad mediante la búsqueda de secretos antes de insertar los cambios en el repositorio.

Al intentar insertar un secreto en un repositorio protegido mediante la protección de inserción, GitHub bloquea la inserción. Debe quitar el secreto de la rama antes de volver a insertarlo. Para obtener más información sobre cómo resolver una inserción bloqueada, vea "Resolución de una inserción bloqueada en la línea de comandos" y "Resolución de una confirmación bloqueada en la interfaz de usuario web" en este artículo.

Si cree que es seguro permitir el secreto, tiene la opción de omitir la protección. Para obtener más información, vea "Permitir que se inserte un secreto bloqueado" y "Omitir la protección de inserción para un secreto".

Para más información sobre los secretos y los proveedores de servicios admitidos para la protección de inserción, consulta "Patrones de análisis de secretos".

Resolución de una inserción bloqueada en la línea de comandos

Al intentar insertar un secreto admitido en un repositorio asegurado por protección de inserción GitHub bloqueará la inserción. Puedes quitar el secreto de la rama o seguir una dirección URL proporcionada para permitir la inserción.

Notas:

  • Si su configuración de Git admite inserciones en varias ramas y no solo en la actual, es posible que se bloquee la inserción debido a que se insertan referencias adicionales y no deseadas. Para obtener más información, consulta las opciones push.default en la documentación de Git.
  • Si se agota el tiempo de espera de secret scanning tras una inserción, GitHub todavía examinará las confirmaciones en busca de secretos después de la inserción.

Eliminación de un secreto introducido por la confirmación más reciente en la rama

Si el secreto bloqueado se introdujo con la confirmación más reciente en la rama, puedes seguir las instrucciones a continuación.

  1. Quita el secreto del código.
  2. Para confirmar los cambios, ejecute git commit --amend. Esto actualiza la confirmación original que introdujo el secreto en lugar de crear una nueva confirmación.
  3. Envía los cambios con git push.

Eliminación de un secreto introducido por una confirmación anterior en la rama

También puedes quitar el secreto si aparece en una confirmación anterior en el historial de Git. Para ello, deberá identificar qué confirmación introdujo primero el secreto y modificar el historial de confirmaciones con una fusión mediante cambio de base interactiva.

  1. Examine el mensaje de error que se muestra al intentar insertar la rama, que enumera todas las confirmaciones que contienen el secreto.

    remote:   —— GitHub Personal Access Token ——————————————————————
    remote:    locations:
    remote:      - commit: 8728dbe67
    remote:        path: README.md:4
    remote:      - commit: 03d69e5d3
    remote:        path: README.md:4
    remote:      - commit: 8053f7b27
    remote:        path: README.md:4
    
  2. A continuación, ejecute git log para ver un historial completo de todas las confirmaciones de la rama, junto con sus marcas de tiempo correspondientes.

    test-repo (test-branch)]$ git log
    commit 8053f7b27 (HEAD -> main)
    Author: Octocat <1000+octocat@users.noreply.github.com
    Date:   Tue Jan 30 13:03:37 2024 +0100
    
      my fourth commit message
    
    commit 03d69e5d3
    Author: Octocat <1000+octocat@users.noreply.github.com>
    Date:   Tue Jan 30 13:02:59 2024 +0100
    
      my third commit message
    
    commit 8728dbe67
    Author: Octocat <1000+octocat@users.noreply.github.com
    Date:   Tue Jan 30 13:01:36 2024 +0100
    
      my second commit message
    
    commit 6057cbe51
    Author: Octocat <1000+octocat@users.noreply.github.com
    Date:   Tue Jan 30 12:58:24 2024 +0100
    
      my first commit message
    
    
  3. Focusing only on the commits that contain the secret, use the output of git log to identify which commit comes earliest in your Git history.

    • In the example, commit 8728dbe67 was the first commit to contain the secret.
  4. Start an interactive rebase with git rebase -i <COMMIT-ID>~1.

    • For <COMMIT-ID>, use the commit identified in step 3. For example, git rebase -i 8728dbe67~1.
  5. In the editor, choose to edit the commit identified in step 3 by changing pick to edit on the first line of the text.

    edit 8728dbe67 my second commit message
    pick 03d69e5d3 my third commit message
    pick 8053f7b27 my fourth commit message
    
  6. Ahora, guarde y cierre el editor; esto comenzará la fusión mediante cambio de base interactiva.

  7. Quita el secreto del código.

  8. Confirme los cambios con git commit --amend.

  9. Ejecuta git rebase --continue para finalizar la fusión mediante cambio de base.

  10. Envía los cambios con git push.

Resolución de una confirmación bloqueada en la interfaz de usuario web

Cuando se usa la interfaz de usuario web para intentar confirmar un secreto admitido en un repositorio asegurado mediante la protección de inserción GitHub bloqueará la confirmación.

Verás un cuadro de diálogo con información sobre la ubicación del secreto, así como opciones que te permiten insertarlo. El secreto también estará subrayado en el archivo para que puedas encontrarlo fácilmente.

Para resolver una confirmación bloqueada en la interfaz de usuario web, debe eliminar el secreto del archivo. Una vez que quites el secreto, puedes confirmar los cambios.

Como alternativa, si determina que es seguro permitir el secreto, use las opciones que se muestran en el cuadro de diálogo para omitir la protección de inserción. Para más información sobre cómo omitir la protección de inserción de la interfaz de usuario web, consulta "Protección contra el envío de cambios para repositorios y organizaciones".

Información adicional