Skip to main content

Efetuar push de um branch bloqueado pela proteção por push

A proteção por push protege você proativamente contra segredos vazados em seus repositórios. Você pode resolver pushes bloqueados e, depois que o segredo detectado for removido, poderá enviar alterações por push para o branch de trabalho pela linha de comando ou interface do usuário da Web.

Quem pode usar esse recurso?

A proteção por push para usuários está habilitada por padrão e pode ser desabilitada nas configurações da sua conta pessoal.

A proteção por push para repositórios e organizações está disponível gratuitamente para repositórios públicos . As organizações que usam o GitHub Enterprise Cloud com uma licença do GitHub Advanced Security também podem habilitar a proteção por push em seus repositórios privados e internos.

Para obter mais informações, consulte "Proteção por push para usuários" e "Proteção por push para repositórios e organizações."

Sobre a proteção por push

A proteção por push ajuda a evitar vazamentos de segurança examinando os segredos antes de enviar alterações por push no seu repositório.

Quando você tentar efetuar push de um segredo em um repositório como uma proteção por push, o GitHub bloqueia o push. Você deve remover o segredo do seu branch antes de fazer push novamente. Para obter mais informações sobre como resolver um push bloqueado, consulte "Resolver um push bloqueado na linha de comando e "Resolver um commit bloqueado na interface do usuário da Web" neste artigo.

Se você acreditar que é seguro permitir o segredo, terá a opção de ignorar a proteção. Para obter mais informações, consulte "Permitir o push de um segredo bloqueado" e "Ignorar a proteção por push em um segredo".

Para obter informações sobre os segredos e provedores de serviços com suporte para proteção por push, confira "Padrões de digitalização de segredo".

Resolver um push bloqueado na linha de comando

Quando você tentar efetuar push de um segredo compatível para um repositório como uma proteção por push habilitada, o GitHub bloqueará o push. Você pode remover o segredo do branch ou seguir uma URL fornecida para permitir o push.

Observações:

  • Se a configuração do Git oferecer suporte a pushes para vários branches e não apenas para o branch atual, o push poderá ser bloqueado devido a referências adicionais e não intencionais serem enviadas por push. Para obter mais informações, confira as opções push.default na documentação do Git.
  • Se secret scanning atingir o tempo limite após o push, GitHub ainda executará uma verificação dos seus commits para segredos após o push.

Remover um segredo introduzido pelo commit mais recente em seu branch

Se o segredo bloqueado tiver sido introduzido pelo commit mais recente em seu branch, você poderá seguir as diretrizes abaixo.

  1. Remova o segredo do código.
  2. Para fazer commit das alterações, execute git commit --amend. Isso atualiza o commit original que introduziu o segredo em vez de criar um novo commit.
  3. Efetue o push das alterações com git push.

Remover um segredo introduzido pelo commit anterior em seu branch

Você também poderá remover o segredo se ele aparecer em uma confirmação anterior no histórico do Git. Para fazer isso, você precisará identificar qual commit introduziu o segredo pela primeira vez e modificar o histórico de commit com um trocar base interativo.

  1. Examine a mensagem de erro exibida quando você tentou enviar por push sua ramificação, que lista todas as confirmações que contêm o segredo.

    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. Em seguida, execute git log para ver um histórico completo de todas as confirmações em sua ramificação, juntamente com seus carimbos de data/hora correspondentes.

    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. Salve e feche o editor para iniciar o trocar base interativo.

  7. Remova o segredo do código.

  8. Fazer commit de suas alterações usando git commit --amend.

  9. Execute git rebase --continue para concluir a troca de base.

  10. Efetue o push das alterações com git push.

Resolver um commit bloqueado na interface do usuário da Web

Quando você usa a interface do usuário da Web para tentar fazer commit de um segredo com suporte em um repositório ou uma organização com a verificação de segredo como uma proteção por push habilitada, o GitHub bloqueará o commit.

Você verá uma caixa de diálogo com informações sobre a localização do segredo, bem como opções que permitem enviar o segredo por push. O segredo também será sublinhado no arquivo para que você possa encontrá-lo facilmente.

Para resolver um commit bloqueado na interface do usuário da Web, você precisará remover o segredo do arquivo. Depois de remover o segredo, você poderá confirmar suas alterações.

Como alternativa, se você determinar que é seguro permitir o segredo, use as opções exibidas na caixa de diálogo para ignorar a proteção por push. Para saber mais sobre como ignorar a proteção por push pela interface do usuário da Web, confira "Proteção por push para repositórios e organizações".

Leitura adicional