Quais são os erros comuns do Git e como corrigi-los?



Desfaça os erros mais comuns durante o controle de versão de seu código na ferramenta de sistema de controle de versão git e proteja a integridade de seus dados.

Com o boom de tecnologia, torna-se inevitável para qualquer pessoa de TI trabalhar em vários dados simultaneamente e seus dados estão em constante evolução com o tempo. Também é essencial rastrear todas as alterações nos dados e estar preparado para desfazer ou reverter qualquer alteração indesejada quando necessário.

Devo confessar, versionar meus dados no Git me permite ser mais experimental no desenvolvimento do meu projeto. Se eu errar, sei que o git sempre tem uma maneira de desfazer e / ou reverter aquela versão do meu projeto para o jeito que era antes de eu estragar tudo. Cada A camada é projetada para permitir que as alterações de dados sejam revisadas e modificadas e / ou corrigidas antes de mover os dados no próximo estágio. Portanto, a seguir estão os erros que são abordados neste blog:





Desativar arquivos / diretórios do índice

Ao adicionar e / ou modificar arquivos, você geralmente tende a usar o comportamento padrão do comando 'git add', que é adicionar todos os arquivos e diretórios ao índice.Muitas vezes você sente a necessidade de remover o estágio de certos arquivos ou modificá-los uma última vez antes de enviá-los.



Sintaxe: git reset


remover arquivos do índice - erros comuns do git -Edureka

Remover o teste de arquivos da área de índice dá a você outra chance de trabalhar novamente em seus dados antes de se comprometer com um repositório local.



Edite a última mensagem enviada

Comando: git commit --amend
Você pode editar a última mensagem de confirmação sem criar uma nova. Para listar os logs de commit, eu defini um alias ‘hist’:
Comando: git config --global alias.hist 'log --pretty = format: '% C (amarelo)% h% Creset% ad | % C (verde)% s% Creset% C (vermelho)% d% Creset% C (azul) [% an] '--graph --decorate --date = short'x


Não altere a mensagem de commit que já foi enviada para um repositório remoto e compartilhada com outros, pois isso tornaria o histórico de commit anterior inválido e, portanto, qualquer trabalho baseado nisso pode ser afetado.

Esqueceu algumas mudanças no último commit

Digamos que você tenha se esquecido de fazer algumas modificações e já tenha confirmado seu snapshot, também não quer fazer outro commit para destacar seu erro.
Comando: git commit --amend


Eu destaquei como o sha-1 id do objeto de confirmação recente foi recriado e alterado. Eu fingi ter feito um único commit combinando ambas as mudanças em uma.

Descartar alterações locais

Então, aqui está um caso em que modifiquei o arquivo ‘README’ e o testei. Em seguida, modifiquei o mesmo arquivo uma segunda vez, mas percebi que não queria a segunda alteração.

Agora, não vou desfazer a alteração inteira manualmente, posso simplesmente puxar a versão em estágios do arquivo.
Sintaxe:
git checkout -–Mudanças locais em um arquivo
git checkout -–Mudanças locais em todos os arquivos no diretório & shy & shy

Comando: git checkout - README

Portanto, descartei minhas últimas alterações no arquivo e aceitei a versão preparada do arquivo. No próximo commit, apenas a versão testada do arquivo vai para o repositório local.

Dados pessoais enviados ao repositório local

Quero remover certos dados do repositório local, mas manter os arquivos no diretório de trabalho.
Sintaxe:
git reset - mixed HEAD ~
git reset --mixed

Comando: git reset - misturado HEAD ~ 1
HEAD ~ 1 indica um commit antes do commit recente apontado pelo branch atual HEAD.

Arquivos no instantâneo atual removidos do repositório local e da área de teste. Adicione os seguintes padrões no arquivo global .gitignore para excluí-los de serem rastreados pelo git.
vim ~ / .gitignore_global
# arquivos de senha #
*.passar
*.chave
* .passwd

Com isso, o commit que tinha o instantâneo dos arquivos de senha é removido e você obtém uma área de teste limpa. Meus arquivos ainda estão presentes em meu diretório de trabalho, mas não estão mais presentes no repositório local, também não serão enviados por push em um repositório remoto.

Cuidado: Se você os perder, o git não poderá recuperá-los para você, pois ele não sabe sobre isso.

Substitua o último commit por um novo commit

Sintaxe: git reset --soft [/ HEAD ~ n>]

A opção ‘–soft’ apenas remove os arquivos confirmados do repositório local enquanto eles ainda estão testados no Índice e você pode submetê-los novamente após uma revisão. é o sha-1 do instantâneo que você deseja remover do repositório local. onde n é o número de commits antes do commit HEAD

Comando :git reset --soft HEAD ~ 1


Modificar arquivos e prepará-los novamente

navegador db para análise sqlite

Comando: git commit -m 'Adicionando index.html e style.css'
Seu histórico de commits agora é:

Cometeu os dados errados

Sintaxe:
git reset --hard HEAD ~ n–Redefinir o projeto para ‘n’ commits antes do último instantâneo confirmado
git reset --hard–Redefina o projeto para um dado instantâneo de id de commit

Comando: git reset --hard HEAD ~ 1


O último commit e os arquivos corrompidos são removidos do repositório local, da área de teste e também do diretório de trabalho.

Cuidado: É um comando perigoso, pois você acaba perdendo arquivos no diretório de trabalho. Não recomendado em um repositório compartilhado remotamente.

Volte ao meu antigo estado de projeto

Você pode saltar para um estado mais antigo de seu projeto na história do tempo. Se você bagunçar na versão mais recente ou precisar de melhorias no código mais antigo, você pode querer criar outro branch a partir daquele instantâneo do projeto antigo para não atrapalhar seu trabalho atual. Vamos ver como:
uma. Liste o histórico do projeto e decida sobre o id de commit mais antigo, comando:vai hist
b. Crie outro branch fora do ID do commit:git checkout -b old-state e7aa9a5
c. Continue trabalhando no código e depois mescle / rebase com o branch 'mestre'.

Recuperar uma filial local excluída

É possível regenerar o trabalho perdido em uma ramificação de referência. Digamos, eu excluí o branch ‘old_code’ sem fundir com o branch principal e perdi o trabalho. E não, eu também não enviei o branch para um repositório remoto, e então? Bem, faça o rastreamento e mantenha uma entrada de diário de todas as alterações feitas em cada referência, vamos ver o meu:vá reflog

Então, HEAD @ {2} é o ponteiro quando mudei para o branch ‘old_code’, vamos recuperar isso:

Sintaxe:git checkout -b
Comando:git checkout -b old_code HEAD @ {2}

Você deve estar agora no branch 'old_code' com seu último trabalho no momento de sua criação.Além disso, o ponteiro 'reflog' em HEAD @ {1} foi o commit recente feito no branch 'old_code'. commit apenas execute o comando como:git reset --hard HEAD @ {1}.Isso também restaura os arquivos modificados no diretório de trabalho.

Se você quiser saber em detalhes como este comando funciona e como você pode gerenciar as entradas de ‘reflog’, você pode também ler meu post anterior sobrerecuperando o branch excluído do git reflog.

Desfazer alterações feitas em um commit

irreverteré usado para registrar alguns novos commits para reverter o efeito de alguns commits anteriores.
Sintaxe: git revert
A partir de meus registros de commits, gostaria de reverter a mudança feita no ID de commit destacado:

Comando: git revert 827bc0d

É melhor que você não reinicie '–hard' os commits compartilhados, mas em vez disso 'git revert' eles para preservar o histórico para que seja mais fácil para todos rastrear os logs do histórico para descobrir o que foi revertido, por quem e porque?

Você pode usar a mesma lógica de referir os commits relativos ao ponteiro HEAD ao invés de dar o id do commit, como em HEAD ~ 3 ou HEAD ~ 4 e assim por diante.

Deu um nome errado ao meu ramo

Você pode renomear um nome de filial local. Muitas vezes você pode querer renomear seu branch com base no problema no qual está trabalhando, sem passar pela dor de migrar todo o seu trabalho de um local para outro. Por exemplo, você pode estar no mesmo branch ou em um branch diferente e ainda ser capaz de renomear o branch desejado, conforme mostrado abaixo:
Sintaxe: git branch -m
Comando: git branch -m old_code old_ # 4920

Como você deve estar se perguntando, o git mantém um registro dessa renomeação? Sim, se refere às suas entradas de ‘reflog’, aqui está a minha:

Renomear uma ramificação não afetará sua ramificação de rastreamento remoto. Veremos na seção remota como substituir um branch no repositório remoto

valor padrão para char em java

Reorganize os registros do histórico antes de enviar para o remoto

Como eu gostaria de ter feito certos commits antes de outros e não teria feito alguns commits. Reorganize e edite interativamente os commits antigos para corrigir ou aprimorar o código de maneira eficaz
Sintaxe: git rebase -i
Comando: git rebase -i fb0a90e- comece a rebasear os commits que foram feitos após o commit-id fb0a90e

Visite novamente o git rebase documentação para entender como um rebase ‘–interactive ou -i’ é diferente de um rebase regular.

Alterações não relacionadas confirmadas em um único commit

Nesse caso, você precisa dividir um commit oculto antigo em vários commits lógicos.
Sintaxe: git rebase -i
Comando: git rebase -i fb0a90e
No editor de rebase, você deve escolher e7aa9a5 commit id e alterá-lo para ‘editar’ em vez de ‘pick’.

mudanças não relacionadas - erros comuns do git -Edureka

Você agora estaria na versão do projeto do commit id-e7aa9a5. Primeiro, redefina o histórico de commit e a área de teste para o comando commit anterior:git reset HEAD ~ 1
Em segundo lugar, edite + estágio + confirme os arquivos individualmente
Comandos:
git add code && git commit -m 'Adicionando códigos iniciais'
git add newcode && git commit -m 'Adicionando novo código'

Terceiro, continue o rebase e termine.

Comando :git rebase --continue
Quarto, veja o histórico com commits adicionais.

Comando: vai hist

dividir o commit em vários usando rebase - erros comuns do git - Edureka

Alterar o e-mail do autor em todos os commits em todos os branches

Eu tenho versionado e submetido meus arquivos de projeto em git há muito tempo, mas até agora nunca me ocorreu que meu id de e-mail foi comprometido em meus logs de histórico de commits que são publicados até mesmo em repositórios remotos. Bem, isso pode acontecer com qualquer pessoa quando você definir inicialmente as configurações no arquivo “.gitconfig”. Para meu alívio, git pode reescrever as variáveis ​​de ambiente que fornecemos ao criar um objeto de confirmação.

Primeiro eu pego a lista de ids de email para decidir os que desejo alterar:
Comando: git log --all --pretty = format: '% an% d'–Isso imprime o nome do autor (refname / branch-name)

Em segundo lugar, eu examino cada commit em cada branch e reescrever o objeto commit com o novo id de e-mail
Comando:
git filter-branch --env-filter '
se ['$ GIT_AUTHOR_NAME' = 'divya']
então
GIT_AUTHOR_EMAIL = 'divya@github.com'
estar
' -- --todos

Arquivos perdidos e encontrados

Suponha que você tenha perdido um determinado arquivo e não se lembre de seu nome, mas pode se lembrar de certas palavras do arquivo. Neste caso, você pode seguir estas etapas-
Passo 1: Liste todos os commits que já contiveram o instantâneo do arquivo com o padrão pesquisado
Comando :git rev-list --todos | xargs git grep -i 'timestamp'



Passo 2 : Crie um novo branch ‘lost-found’ a partir deste commit-id destacado
Sintaxe: git checkout -b lost-found d8c6a76a6dcb1fc6e8c3f6b097e1bd07e7cd328f

Esqueci qual branch tem meu commit-id

Às vezes, depois de detectar um ID de commit cheio de erros, você também pode querer saber todos os branches que têm esse commit para que possa consertar todos. Verificar o histórico de cada filial não é muito prático em um grande projeto com várias filiais.

Um commit incorreto feito em meu aplicativo de construção de navegação uma vez quebrei o código, foi quando usei o Comando ‘git bisect’ para detectar o ID de confirmação que estava incorreto seguido pelocomando:git branch --containspara listar os branches com aquele commit ruim.

Então, agora eu conheço todos os branches que ainda têm o commit inválido, eu poderia reverter ou redefinir este changeset.

Excluir um commit do histórico

Às vezes, sinto a necessidade de simplesmente apagar um commit da história e não deixar nenhum rastro dele. Eu não recomendo que você tente esta proeza em um branch compartilhado, mas apenas em seu branch local.
Sintaxe: git rebase -i
Comando :git rebase -i 93859d8
No editor de rebase-> substitua ‘edit’ por ‘drop’ para o ID de commit destacado: 69f4813

o que é chef em devops

Em alguns casos, esta reescrita pode resultar em conflitos. Você deve resolver os conflitos e prosseguir.

Atenção : Este é um comando perigoso, pois reescreve o histórico e pode perder dados. Tal ramificação difere de sua contraparte remota e terá que ser empurrado com o--forçaou--forçar com aluguelopção.

Empurrou um ramo errado para o controle remoto

Agora, aqui está o que eu quero fazer - quero excluir um filial remota e também parar de rastreá-lo em minha filial local.git push'Comando quando usado com o--excluiropção exclui o branch remoto Então, é assim que obtenho a cópia local do projeto clonado -

git clone https://github.com/greets/myProj.git
cd myProj


Uma vez, o branch remoto é excluído, outros no repositório compartilhado devem atualizar e atualizar suas referências remotas com o--ameixa secaopção para excluir as referências de objetos ausentes:git fetch --prune -v origin

Neste post, mencionei alguns dos erros comuns ou mudanças que o git pode ajudar a corrigir. Cada código é único e desenvolvido à sua maneira, portanto, também existem diferentes maneiras de abordar e corrigir um problema. Você sempre pode se referir ao oficial documentação git para entender como vários comandos git protegem seu código-fonte e como utilizar os comandos da melhor maneira possível.

Agora que você entendeu os erros comuns do Git, verifique este pela Edureka, uma empresa de aprendizagem online confiável com uma rede de mais de 250.000 alunos satisfeitos espalhados por todo o mundo. O curso Edureka DevOps Certification Training ajuda os alunos a entender o que é DevOps e ganhar experiência em vários processos e ferramentas DevOps, como Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack e GIT para automatizar várias etapas no SDLC.

Tem alguma questão para nós? Mencione isso na seção de comentários deste “erros comuns do Git” e entraremos em contato com você