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.
- Remova o segredo do código.
- 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. - 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.
-
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
-
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
-
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.
- In the example, commit
-
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
.
- For
-
In the editor, choose to edit the commit identified in step 3 by changing
pick
toedit
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
-
Salve e feche o editor para iniciar o trocar base interativo.
-
Remova o segredo do código.
-
Fazer commit de suas alterações usando
git commit --amend
. -
Execute
git rebase --continue
para concluir a troca de base. -
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".