Erro ao confirmar ... Como corrigi-lo? Uma bagunça na história dos commits ... Como fazer tudo parecer decente? O autor do artigo, cuja tradução estamos publicando hoje, diz que foi escrito especificamente para quem fez essas perguntas. Segundo ele, tendo estudado as técnicas para trabalhar com o Git apresentadas aqui, você pode avançar significativamente no caminho de dominar o Git.
Supõe-se que o leitor deste artigo já esteja familiarizado com o básico do Git. Caso contrário, é recomendável primeiro dominar a base, por exemplo, usando 
este material.
Corrigir bugs nas confirmações
Aqui, examinaremos vários cenários para erros nas confirmações e suas correções.
▍ Cenário número 1
Suponha que você tenha confirmado muitos arquivos e percebido que a mensagem de confirmação não estava muito clara. Depois disso, você decidiu alterar esta mensagem. Para fazer isso, use o 
git commit --amend . Aqui está um exemplo de sua aplicação:
 git commit --amend -m "New commit message" 
▍ Cenário número 2
Suponha que você deseje confirmar seis arquivos, mas comprometeu apenas cinco por engano. Parece que você pode corrigir esse erro simplesmente criando uma nova confirmação e adicionando o sexto arquivo ausente lá.
Essa abordagem tem direito à vida. Mas, para manter o histórico de consolidação em boas condições, provavelmente seria muito melhor poder adicionar um arquivo ignorado aleatoriamente ao mesmo commit. Isso pode ser feito, novamente, com o 
git commit --amend . Seu uso é assim:
 git add file6 git commit  
O sinalizador 
--no-edit significa que a mensagem de confirmação não muda.
▍ Cenário número 3
As confirmações feitas no Git estão vinculadas ao nome do autor e ao endereço de e-mail dele. Normalmente, esses dados são indicados executando a configuração inicial do Git. Como resultado, aqueles que usam o Git não podem, ao executar cada commit, se preocupar com as informações sobre seu autor.
Além disso, é bem possível que, ao trabalhar com alguns projetos, você precise usar informações sobre o autor, por exemplo, um endereço de e-mail diferente dos principais. Para esse projeto, você precisa especificar um endereço de email usando este comando:
 git config user.email "your email id" 
Suponha que você esqueceu de fazer essa configuração e já fez o primeiro commit. Corrigir a situação já pode familiar para nós equipe 
amend . Utilizando-o, você pode alterar as informações sobre o autor do commit anterior:
 git commit --amend --author "Author Name <Author Email>" 
▍ Nota
Use o comando de 
amend apenas em seu repositório local. Seu uso em repositórios remotos pode levar a uma enorme confusão.
Colocando ordem no histórico de confirmações
Suponha que você esteja trabalhando em um pedaço de código para um projeto. Você sabe que levará cerca de dez dias. Durante esses dez dias, outros desenvolvedores se comprometem com o repositório de origem.
É recomendável manter a sincronização entre os repositórios local e remoto. Isso evita os muitos conflitos de mesclagem que surgem quando os repositórios são muito raros para sincronizar. Seguindo essa prática, você decide baixar as alterações do repositório remoto a cada dois dias.
Sempre que você baixa o código de um controle remoto para um repositório local, uma nova consolidação de mesclagem é criada no repositório local. Isso significa que, no seu histórico de consolidação local, haverá muitas confirmações que podem confundir quem verá o seu código.
 Histórico de confirmações no repositório local
Histórico de confirmações no repositório localComo arrumar o histórico de consolidação? Para resolver esse problema, você pode usar o 
git rebase .
Comando itGit rebase
Considere o 
git rebase como um exemplo.
 Confirma no ramo Release e no ramo Feature
Confirma no ramo Release e no ramo FeatureExistem três confirmações no ramo 
Release : 
Rcommit1 , 
Rcommit2 e 
Rcommit3 . Você criou o seu ramo 
Feature partir do ramo 
Release quando ele tinha apenas um commit - 
Rcommit1 . Depois disso, você adicionou duas confirmações ao ramo 
Feature . Estes são 
Fcommit1 e 
Fcommit2 . Seu objetivo é fazer o upload de confirmações da ramificação 
Release para a ramificação 
Feature . Para fazer isso, você usará o comando 
rebase .
Usaremos o 
release e o 
feature nomes para os dois ramos em consideração.
Como resultado, o uso do 
rebase terá a seguinte aparência:
 git checkout feature git rebase release 
▍ Recursos do comando rebase
O comando 
rebase usado para garantir que a ramificação 
Feature tenha um novo código da ramificação 
Release .
Ao aplicar esse comando, o sistema tenta adicionar cada confirmação à ramificação 
Feature , uma de cada vez, e verificar se há conflitos. Se isso parecer complicado, vejamos a figura a seguir. Isso mostra os mecanismos internos do 
rebase .
 Ramificação de recursos e três etapas do comando rebase
Ramificação de recursos e três etapas do comando rebaseEtapa 1
Quando o comando é chamado, o ramo 
Feature aponta para o cabeçalho do ramo 
Release . Depois disso, há três confirmações no ramo 
Feature : 
Rcommit1 , 
Rcommit2 e 
Rcommit3 . Talvez aqui você tenha uma pergunta sobre o que aconteceu com os 
Fcommit1 e 
Fcommit2 . Esses commits não desapareceram, eles serão usados nas próximas etapas.
Etapa 2
Agora o Git está tentando adicionar o commit do 
Fcommit1 ao ramo 
Feature . Se não houver conflito, 
Fcommit1 adicionado após 
Rcommit3 . Se um conflito for detectado, o Git o reportará e você terá que resolvê-lo manualmente.
Etapa 3
Depois que o commit 
Fcommit1 adicionado ao ramo 
Feature , o Git tenta adicionar o 
Fcommit2 . Aqui, novamente, se não houver conflitos, o 
Fcommit2 adicionado após o 
Fcommit1 e a operação será concluída com êxito. Se um conflito for detectado, o Git, como antes, relatará isso e se oferecerá para lidar com isso.
Após a conclusão do comando 
rebase você pode ver que há confirmações 
Rcommit1 , 
Rcommit2 , 
Rcommit3 , 
Fcommit1 e 
Fcommit2 na ramificação 
Feature .
▍ Nota
Ao trabalhar com o Git, o comando 
merge e o comando 
rebase são 
rebase . Isso não quer dizer que um deles seja preferível ao outro.
Se você usar o comando 
merge , receberá uma confirmação de 
merge . Se você usar 
rebase , não terá nenhuma 
rebase adicional.
É recomendável que você use esses comandos em várias situações. Portanto, 
rebase é adequado para atualizar o código do repositório local com base no código mais recente do repositório remoto. Use o comando 
merge para executar solicitações pull para mesclar a ramificação 
Feature com a ramificação 
Release ou 
Master .
Sumário
Depois de estudar os conceitos apresentados neste artigo, você aprimorou suas habilidades em Git e está mais próximo do nível de um especialista em Git. Esperamos que o que você aprendeu aqui seja útil para você. Mas o mundo do Git é enorme, portanto, tendo dominado algo novo, não pare por aí e siga em frente.
Caros leitores! Você encontrou uma bagunça nos git commit?
