Esse guia traz alguns comandos que vão ajudar no dia a dia nas duvidas de como usar o Git.
Esse guia foi editado a partir do gist de leocomelli https://gist.github.com/leocomelli/2545add34e4fec21ec16
Menu Maroto:
- Github-Guide-to-code
- Estados dos seus arquivos no git
- Comandos Ajuda Github
- Comandos de Configuração do GIT
- Geral
- Ignorar Arquivos
- Repositório
- Comandos para comitar arquivo/diretório
- Comandos para remover arquivo/diretório
- Visualizar hitórico
- Exibir histórico
- Exibir histórico com diff das duas últimas alterações
- Exibir resumo do histórico (hash completa, autor, data, comentário e qtde de alterações (+/-))
- Exibir informações resumidas em uma linha (hash completa e comentário)
- Exibir histórico com formatação específica (hash abreviada, autor, data e comentário)
- Exibir histório de um arquivo específico
- Exibir histórico de um arquivo específico que contêm uma determinada palavra
- Exibir histórico modificação de um arquivo
- Exibir histório de um determinado autor
- Exibir revisão e autor da última modificação de uma bloco de linhas
- Comandos para Desfazer operações
- Repositório Remoto
- Exibir os repositórios remotos
- Vincular repositório local com um repositório remoto
- Exibir informações dos repositórios remotos
- Renomear um repositório remoto
- Desvincular um repositório remoto
- Enviar arquivos/diretórios para o repositório remoto
- Atualizar repositório local de acordo com o repositório remoto
- Atualizar os arquivos no branch atual
- Buscar as alterações, mas não aplica-las no branch atual
- Clonar um repositório remoto já existente
- Tags
- Branches
- Criando um novo branch
- Trocando para um branch existente
- Criar um novo branch e trocar
- Voltar para o branch principal (master)
- Resolver merge entre os branches
- Apagando um branch
- Listar branches
- Listar branches com informações dos últimos commits
- Listar branches que já foram fundidos (merged) com o master
- Listar branches que não foram fundidos (merged) com o master
- Criando branches no repositório remoto
- Criando um branch remoto com o mesmo nome
- Criando um branch remoto com nome diferente
- Baixar um branch remoto para edição
- Apagar branch remoto
- Rebasing
- Stash
- Reescrevendo o histórico
- Bisect
- Modificado (modified);
- Preparado (staged/index)
- Consolidado (comitted);
git help <Comando específico>git help addgit help commitgit help <qualquer_comando_git>As configurações do GIT são armazenadas no arquivo .gitconfig localizado dentro do diretório do usuário do Sistema Operacional. As configurações realizadas através dos comandos abaixo serão incluídas no arquivo .gitconfig
git config --global user.name "Victor Caldas"git config --global user.email contatos.caldas@gmail.comgit config --global core.editor vimgit config --global merge.tool vimdiffgit config --global core.excludesfile ~/.gitignoregit config --listOs nomes de arquivos/diretórios ou extensões de arquivos listados no arquivo .gitignore não serão adicionados em um repositório. Existem dois arquivos .gitignore, são eles:
-
Normalmente armazenado no diretório do usuário do Sistema Operacional. O arquivo que possui a lista dos arquivos/diretórios a serem ignorados por todos os repositórios deverá ser declarado conforme citado acima. O arquivo não precisa ter o nome de .gitignore.
-
Por repositório: Deve ser armazenado no diretório do repositório e deve conter a lista dos arquivos/diretórios que devem ser ignorados apenas para o repositório específico.
git initgit statusgit add meu_arquivo.txtgit add meu_diretoriogit add .git add -f arquivo_no_gitignore.txtgit commit meu_arquivo.txtgit commit meu_arquivo.txt meu_outro_arquivo.txtgit commit meuarquivo.txt -m "minha mensagem de commit"git rm meu_arquivo.txtgit rm -r diretoriogit loggit log -p -2git log --statgit log --pretty=onelinegit log --pretty=format:"%h - %an, %ar : %s"%h: Abreviação do hash; %an: Nome do autor; %ar: Data; %s: Comentário. Verifique as demais opções de formatação no Git Book
git log -- <caminho_do_arquivo>git log --summary -S<palavra> [<caminho_do_arquivo>]git log --diff-filter=M -- <caminho_do_arquivo>O pode ser substituido por: Adicionado (A), Copiado (C), Apagado (D), Modificado (M), Renomeado (R), entre outros.
git log --author=usuariogit blame -L 12,22 meu_arquivo.txt Este comando deve ser utilizando enquanto o arquivo não foi adicionado na staged area.
git checkout -- meu_arquivo.txtEste comando deve ser utilizando quando o arquivo já foi adicionado na staged area.
git reset HEAD meu_arquivo.txtSe o resultado abaixo for exibido, o comando reset não alterou o diretório de trabalho.
Unstaged changes after reset:
M meu_arquivo.txtA alteração do diretório pode ser realizada através do comando abaixo:
git checkout meu_arquivo.txtgit remotegit remote -vgit remote add origin git@github.com:victorcaldas/projetoAndroid-git.gitgit remote show origingit remote rename origin curso-gitgit remote rm curso-gitO primeiro push de um repositório deve conter o nome do repositório remoto e o branch.
git push -u origin masterOs demais pushes não precisam dessa informação
git pushgit pullgit fecthgit clone git@github.com:victorCaldas/projetoAndroid-git.gitgit tag vs-1.1git tag -a vs-1.1 -m "Minha versão 1.1"Para criar uma tag assinada é necessário uma chave privada (GNU Privacy Guard - GPG).
git tag -s vs-1.1 -m "Minha tag assinada 1.1"git tag -a vs-1.2 9fceb02git push origin vs-1.2git push origin --tagsO master é o branch principal do GIT.
O HEAD é um ponteiro especial que indica qual é o branch atual. Por padrão, o HEAD aponta para o branch principal, o master.
git branch bug-123git checkout bug-123Neste caso, o ponteiro principal HEAD esta apontando para o branch chamado bug-123.
git checkout -b bug-456git checkout mastergit merge bug-123Para realizar o merge, é necessário estar no branch que deverá receber as alterações. O merge pode automático ou manual. O merge automático será feito em arquivos textos que não sofreram alterações nas mesmas linhas, já o merge manual será feito em arquivos textos que sofreram alterações nas mesmas linhas.
A mensagem indicando um merge manual será:
Automerging meu_arquivo.txt
CONFLICT (content): Merge conflict in meu_arquivo.txt
Automatic merge failed; fix conflicts and then commit the result.git branch -d bug-123git branchgit branch -vgit branch --mergedgit branch --no-mergedgit push origin bug-123git push origin bug-123:new-branchgit checkout -b bug-123 origin/bug-123git push origin:bug-123git checkout experimentgit rebase masterMais informações e explicações sobre o Rebasing
Para alternar entre um branch e outro é necessário fazer o commit das alterações atuais para depois trocar para um outro branch. Se existir a necessidade de realizar a troca sem fazer o commit é possível criar um stash. O Stash como se fosse um branch temporário que contem apenas as alterações ainda não commitadas.
git stashgit stash listgit stash applygit stash apply stash@{2}Onde 2 é o indíce do stash desejado.
git stash branch meu_branchgit commit --amend -m "Minha nova mensagem"git rebase -i HEAD~3O editor de texto será aberto com as linhas representando os três últimos commits.
pick f7f3f6d changed my name a bit
pick 310154e updated README formatting and added blame
pick a5f4a0d added catfileAltere para edit os commits que deseja realizar alterações.
edit f7f3f6d changed my name a bit
pick 310154e updated README formatting and added blame
pick a5f4a0d added catfileFeche o editor de texto.
Digite o comando para alterar a mensagem do commit que foi marcado como edit.
git commit –amend -m “Nova mensagem”Aplique a alteração
git rebase --continueAtenção: É possível alterar a ordem dos commits ou remover um commit apenas mudando as linhas ou removendo.
Seguir os mesmos passos acima, porém marcar os commtis que devem ser juntados com *squash
git filter-branch --tree-filter 'rm -f passwords.txt' HEADO bisect (pesquisa binária) é útil para encontrar um commit que esta gerando um bug ou uma inconsistência entre uma sequência de commits.
git bisect startgit bisect badgit bisect good vs-1.1O GIT irá navegar entre os commits para ajudar a indentificar o commit que esta com o problema. Se o commit atual não estiver quebrado, então é necessário marca-lo como bom.
git bisect goodSe o commit estiver com o problema, então ele deverá ser marcado como ruim.
git bisect badDepois de encontrar o commit com problema, para retornar para o HEAD utilize:
git bisect reset