Todos os produtos
Search
Central de documentação

Alibaba Cloud DevOps:Modo de revisão por push

Última atualização: Jun 28, 2026

O modo de revisão por push simplifica o fluxo de trabalho do git push ao criar e gerenciar Merge Requests automaticamente, sem ferramentas adicionais, melhorando a qualidade do código e a colaboração.

Revisão de código automatizada

No Codeup, o modo AGit-Flow permite iniciar uma revisão de código pela linha de comando ao executar git pr, tornando o processo mais eficiente. No entanto, esse modo exige a instalação local da ferramenta git-repo e a execução de comandos específicos. Muitos desenvolvedores também desejam um fluxo em que o código enviado passe por revisão antes de ser integrado à branch de destino. O modo de revisão por push atende a essa necessidade criando automaticamente um Merge Request para seus commits quando você executa git push, sem exigir ferramentas extras.

Vantagens do modo de revisão por push

O modo de revisão por push é um novo método de colaboração de código no Codeup que oferece uma experiência eficiente de revisão:

  • Para desenvolvedores: Não é mais necessário criar uma nova branch ou alternar para o navegador web para iniciar uma revisão de código. Basta executar git push para criar um Merge Request em uma única etapa.

  • Para administradores: Configure um repositório para que, quando os desenvolvedores executarem push de código, a branch não seja atualizada diretamente. Em vez disso, o sistema cria um Merge Request automaticamente. Isso garante a qualidade do código por meio de um processo de revisão obrigatório.

A tabela a seguir compara o modo de revisão por push com o modo padrão de desenvolvimento por branch.

Modo de desenvolvimento por branch

Modo de revisão por push

Fazer commit de código

Faça commit em uma branch de recurso.

Faça commit diretamente na branch master.

Iniciar uma revisão de código

Use a interface web do Codeup.

Execute git push.

Atualizar uma revisão de código

Atualize a branch de recurso.

Execute git push novamente.

Permissões necessárias para contribuir

Developer ou superior

Viewer ou superior

Qualidade do código

Apenas pushes para uma branch protegida são revisados.

Todos os pushes para qualquer branch são revisados.

Após ativar o modo de revisão por push nas configurações do seu repositório, os seguintes benefícios estarão disponíveis:

  • Contribua com código e crie um Merge Request sem precisar criar uma nova branch. Faça commit de alterações diretamente na branch master, evitando a sobrecarga de gerenciar branches redundantes.

  • A execução de git push cria ou atualiza um Merge Request em vez de enviar alterações diretamente para a branch.

  • Se seu código precisar de alterações após uma revisão, faça novos commits e execute git push novamente para atualizar automaticamente o Merge Request existente.

  • Usuários com permissão apenas de Viewer podem contribuir com código. Como os pushes criam Merge Requests em vez de mesclar código diretamente, conceda permissões de escrita a poucos administradores, enquanto a maioria dos desenvolvedores precisa apenas de permissões de leitura. Esse modelo reduz o risco de alterações acidentais no repositório.

  • Utilize uma push option para controlar o comportamento do git push. Para mais informações, consulte a seção Colaboração com o modo de revisão por push.

Ativar o modo de revisão por push

Em , clique em no interruptor para ativar ou desativar o modo de revisão por push.

image

Importante

Ativar o modo de revisão por push altera o comportamento do git push. Compreenda essa mudança antes de ativar o modo:

  • Depois de ativado, a execução de git push cria ou atualiza automaticamente um Merge Request em vez de atualizar diretamente a branch remota. Isso se aplica mesmo que você tenha permissões de Developer para o repositório.

  • Um usuário com a função Viewer pode executar git push para criar um Merge Request. O código só é mesclado na branch após aprovação e integração de acordo com os requisitos da branch.

  • Como o git push cria um Merge Request em vez de atualizar o código diretamente, ele não aciona webhooks para eventos de push.

  • Ainda é possível usar a interface web do Codeup para criar, editar ou excluir arquivos como parte de um fluxo de trabalho de revisão.

Colaboração com o modo de revisão por push

Os exemplos a seguir mostram como usar o modo de revisão por push para colaboração no desenvolvimento.

Criação automática de Merge Request

Suponha que você tenha uma nova tarefa de desenvolvimento. Com o modo de revisão por push, o fluxo de trabalho tem apenas duas etapas:

  • Desenvolva na branch master.

  • Execute git push.

Vamos acompanhar um exemplo.

  1. Desenvolva na branch master do repositório de exemplo e crie um commit, por exemplo, 27e76f58.

    $ git log
    commit 27e76f582ca7207a695dd8762b66ef443adcc572 (HEAD -> master)
    Author: Codeup User <codeup.user@example.com>
    Date:   Tue Oct 11 10:16:18 2022 +0800
    
        feat: new feature
    
        Signed-off-by: Codeup User <codeup.user@example.com>
    
    commit 44094ec92eb122deab5a0367552bd081540c4353 (origin/master, origin/HEAD)
    Author: Codeup User <codeup.user@example.com>
    Date:   Tue Oct 11 10:09:39 2022 +0800
    
        Initial commit
  2. Em seguida, envie as alterações para o repositório remoto executando git push:

    $ git push
    Enumerating objects: 4, done.
    Counting objects: 100% (4/4), done.
    Compressing objects: 100% (2/2), done.
    Writing objects: 100% (3/3), 310 bytes | 310.00 KiB/s, done.
    Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
    remote: +-----------------------------------------------------------------------------------+
    remote: | The following tips are provided by Codeup:                                        |
    remote: +-----------------------------------------------------------------------------------+
    remote: | Merge request #31620 has been created, please visit:                              |
    remote: | https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo/merge_request/31620       |
    remote: +-----------------------------------------------------------------------------------+
    To https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git
     * [new reference]         master -> refs/merge-requests/31620/head

Como você pode ver, com o modo de revisão por push ativado, o git push não atualizou diretamente a branch remota. Em vez disso, criou o Merge Request #31620. A origem desse Merge Request é o seu commit local mais recente, e o destino é a branch atual. Verifique isso na página de detalhes do Merge Request:

高的 (55)

Esse fluxo de trabalho elimina a necessidade de criar uma branch de recurso ou usar um navegador web para criar um Merge Request, simplificando muito o processo. Além disso, como todos os pushes devem ser revisados antes da mesclagem, a qualidade do código é garantida.

Atualização automática de Merge Request

Durante uma revisão de código, muitas vezes é necessário modificar seu código várias vezes com base no feedback dos revisores. Para atualizar o Merge Request correspondente, basta executar git push novamente. Vejamos um exemplo.

Primeiro, partindo do commit 27e76f58, faça alterações com base nos comentários da revisão e crie um novo commit, e00db452.

$ git log
commit e00db4522f2d6ca5b42377ca76c7b3a7e12db8a5 (HEAD -> master)
Author: Codeup User <codeup.user@example.com>
Date:   Tue Oct 11 11:09:42 2022 +0800

    feat: fix comment

    Signed-off-by: Codeup User <codeup.user@example.com>

commit 27e76f582ca7207a695dd8762b66ef443adcc572
Author: Codeup User <codeup.user@example.com>
Date:   Tue Oct 11 10:16:18 2022 +0800

    feat: new feature

    Signed-off-by: Codeup User <codeup.user@example.com>

commit 44094ec92eb122deab5a0367552bd081540c4353 (origin/master, origin/HEAD)
Author: Codeup User <codeup.user@example.com>
Date:   Tue Oct 11 10:09:39 2022 +0800

    Initial commit

Em seguida, execute git push. O sistema atualiza automaticamente o Merge Request e exibe uma mensagem de confirmação.

$ git push
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 340 bytes | 340.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: +-----------------------------------------------------------------------------------+
remote: | The following tips are provided by Codeup:                                        |
remote: +-----------------------------------------------------------------------------------+
remote: | Merge request #31620 has been updated, please visit:                              |
remote: | https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo/merge_request/31620       |
remote: +-----------------------------------------------------------------------------------+
To https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git
   27e76f582c..e00db4522f  master -> refs/merge-requests/31620/head

A saída mostra que este push atualizou o Merge Request #31620. Se você verificar a página de detalhes, a versão de origem do Merge Request mudou para e00db4522, e o histórico de commits agora mostra dois commits. Se mais alterações forem necessárias, repita esse processo.

Criar um novo Merge Request

Executar o comando git push repetidamente atualiza automaticamente um Merge Request existente. Para criar um novo Merge Request em vez de atualizar um existente, adicione uma push option ao comando. Execute git push -o review=new para criar um novo Merge Request.

Após fazer alterações locais, execute git push -o review=new. Um novo Merge Request com ID #31626 será criado.

$ git push -o review=new
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 361 bytes | 361.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: +-----------------------------------------------------------------------------------+
remote: | The following tips are provided by Codeup:                                        |
remote: +-----------------------------------------------------------------------------------+
remote: | Merge request #31626 has been created, please visit:                              |
remote: | https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo/merge_request/31626       |
remote: +-----------------------------------------------------------------------------------+
To https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git
 * [new reference]         master -> refs/merge-requests/31626/head

Nota: Não é possível criar um novo Merge Request se já existir um idêntico em aberto.

$ git push -o review=new
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: +-----------------------------------------------------------------------------------+
remote: | The following tips are provided by Codeup:                                        |
remote: +-----------------------------------------------------------------------------------+
remote: | Merge request create failed. There exists a same merge request in progress:       |
remote: | https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo/merge_request/31620       |
remote: +-----------------------------------------------------------------------------------+
To https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git
 ! [remote rejected]       master -> master (create MR failed)
error: failed to push some refs to 'https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git'

Atualizar um Merge Request específico

Se houver vários Merge Requests abertos para a mesma branch de destino, a execução de git push falhará porque o sistema não conseguirá determinar qual deles deve ser atualizado.

$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 294 bytes | 294.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote: +-------------------------------------------------------------------------------------------------+
remote: | The following tips are provided by Codeup:                                                      |
remote: +-------------------------------------------------------------------------------------------------+
remote: | You need to manually specify the merge request to update because there are already              |
remote: | multiple merge requests that you created earlier for the same target branch:                    |
remote: |                                                                                                 |
remote: | * [ID: 31626] https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo/merge_request/31626       |
remote: | * [ID: 31620] https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo/merge_request/31620       |
remote: |                                                                                                 |
remote: | Then, update specific merge request based on it's ID (MR-ID):                                   |
remote: |     git push -o review=<MR-ID>                                                                  |
remote: |                                                                                                 |
remote: | Or you can create a new one:                                                                    |
remote: |     git push -o review=new                                                                      |
remote: +-------------------------------------------------------------------------------------------------+
To https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git
 ! [remote rejected]       master -> master (unable to determine which mr to update)
error: failed to push some refs to 'https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git'

A saída mostra dois Merge Requests abertos para a mesma branch de destino, com IDs 31626 e 31620. O sistema não consegue determinar qual deles você pretende atualizar. Você tem duas opções:

  • Use -o review=new para criar um novo Merge Request.

  • Use -o review=<MR-ID> para especificar o ID do Merge Request que deseja atualizar.

A primeira opção foi mostrada na seção Criar um novo Merge Request. Vamos ver como atualizar um Merge Request específico.

Para atualizar o Merge Request #31626, execute o comando: git push -o review=31626.

$ git push -o review=31626
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 303 bytes | 303.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote: +-----------------------------------------------------------------------------------+
remote: | The following tips are provided by Codeup:                                        |
remote: +-----------------------------------------------------------------------------------+
remote: | Merge request #31626 has been updated, please visit:                              |
remote: | https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo/merge_request/31626       |
remote: +-----------------------------------------------------------------------------------+
To https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git
   0ba010f2ff..037578c634  master -> refs/merge-requests/31626/head

Isso atualiza o Merge Request com ID 31626.

Resolver conflitos de atualização

Ao tentar atualizar um Merge Request, você pode descobrir que outro usuário já o atualizou. Para evitar que seu push sobrescreva as alterações dele, a atualização falhará. Por exemplo, se você tentar atualizar o Merge Request #31644 executando git push -o review=31644, poderá ver o seguinte erro:

$ git push -o review=31644
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 326 bytes | 326.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: +--------------------------------------------+
remote: | The following tips are provided by Codeup: |
remote: +--------------------------------------------+
remote: | MR is diverged with this push              |
remote: +--------------------------------------------+
To https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git
 ! [remote rejected]       master -> master (MR is diverged with this push)
error: failed to push some refs to 'https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git'

A mensagem de erro indica que seu push divergiu do Merge Request remoto. Você tem duas opções:

  • Baixe as alterações do outro usuário, resolva os conflitos localmente e então faça o push novamente.

  • Force a atualização do Merge Request com suas alterações locais.

Vamos explorar a primeira opção: baixar as alterações remotas e resolver conflitos localmente.

Primeiro, execute git fetch origin refs/merge-requests/<mr-id>/head. Neste exemplo, o mr-id é 31644, então o comando é: git fetch origin refs/merge-requests/31644/head

$ git fetch origin refs/merge-requests/31644/head
From https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo
 * branch                  refs/merge-requests/31644/head -> FETCH_HEAD

Em seguida, faça rebase das suas alterações locais sobre a referência baixada executando git rebase FETCH_HEAD. Essa operação pode resultar em conflitos. Se isso ocorrer, resolva-os como faria normalmente.

$ git rebase FETCH_HEAD
Successfully rebased and updated refs/heads/master.

Após um rebase bem-sucedido, sua branch local contém as alterações remotas. Agora, você pode fazer o push novamente.

$ git push -o review=31644
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 331 bytes | 331.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: +-----------------------------------------------------------------------------------+
remote: | The following tips are provided by Codeup:                                        |
remote: +-----------------------------------------------------------------------------------+
remote: | Merge request #31644 has been updated, please visit:                              |
remote: | https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo/merge_request/31644       |
remote: +-----------------------------------------------------------------------------------+
To https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git
   a4a2cad45c..8da076fb44  master -> refs/merge-requests/31644/head

Você atualizou com sucesso o Merge Request #31644.

Forçar atualização de um Merge Request

Às vezes, você pode querer sobrescrever as alterações remotas em um Merge Request com sua versão local. Para fazer isso, é necessário realizar uma atualização forçada.

Você precisará de duas informações:

  • O ID do Merge Request. Este é o número no final da URL do Merge Request. Por exemplo, se a URL for https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo/merge_request/31644, o ID é 31644.

  • A versão de origem atual do Merge Request. Encontre essa informação na página de detalhes do Merge Request. Neste exemplo, a versão de origem é 8da076fb.

Em seguida, execute o comando git push -o review=<mr-id> -o old-oid=<old-oid>. Para este exemplo, o comando é git push -o review=31644 -o old-oid=8da076fb.

Este comando força a atualização do Merge Request #31644 para corresponder à sua versão local. Tenha cuidado: esta ação sobrescreve as alterações feitas por outros usuários. Use este comando apenas quando tiver certeza de que deseja descartar as alterações remotas para evitar sobrescrever o trabalho de outros.

$ git push -o review=31644 -o old-oid=8da076fb
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: +-----------------------------------------------------------------------------------+
remote: | The following tips are provided by Codeup:                                        |
remote: +-----------------------------------------------------------------------------------+
remote: | Merge request #31644 has been updated, please visit:                              |
remote: | https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo/merge_request/31644       |
remote: +-----------------------------------------------------------------------------------+
To https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git
   8da076fb44..8da076fb44  master -> refs/merge-requests/31644/head

Ignorar revisão e fazer push diretamente

Se você fez uma alteração menor, como corrigir um erro de digitação em um comentário, e deseja pular o processo de revisão de código, use o comando git push -o review=no. Este comando se comporta da mesma forma que um git push padrão quando o modo de revisão por push está desativado. Note que você deve ter permissões de push direto para a branch de destino para usar a opção review=no.

Notas de uso

Para atualizar um Merge Request, você deve ser seu autor ou um revisor. Caso contrário, a atualização falhará.

remote: +---------------------------------------------------------------------+
remote: | The following tips are provided by Codeup:                          |
remote: +---------------------------------------------------------------------+
remote: | Merge request #31644 update failed.                                 |
remote: | You need to be the author or reviewer to update this merge request. |
remote: +---------------------------------------------------------------------+