Pular para o conteúdo principal

GIT - Conceitos e Comandos

[[toc]]


Git é um versionador de codigo

Configurando


Configurando o git

git config --global user.name "Uniliva Alves"
git config --global user.email "uniliva@hotmail.com"

Desconectar do git

git config --global --unset user.name
git config --global --unset user.email
ou
git config --global --unset-all

Criando um repositório local

git init
  • Verificando os arquivos dentro de .git
tree .git

Para isso e necessário que a ferramenta tree esteja instalada


Ignorar arquivos, que não serão commitados

  • Crie um arquivo com o nome .gitignore
  • coloque os arquivos ou pasta, um por linha

Conectando o github ao pc

1 - Criar um par de chave sshe com  ssh-keygen não prencha nada

2 - Entre na pasta onde a chave foi criada abra o arquivo  id_rsa.pub copie a chave

3 - va ate o github em ssh-key e insira a chave e um nome para ela


Trabalhando com arquivos


Adicionado na stage área

git add .  //adiciona tudo
git add *.txt //Adiciona todos os arquivos txt
git add <nome_do_arquivo> //adiciona apenas o arquivo

Vendo o status dos arquivos

git status

Commitando arquivos

git commit -m <Mensagem do commit>

Ver Alterações e Histórico

Ver o que foi alterando antes de adicionar a stage area

git diff

Depois que esta na stage area

git diff --staged

Ver o histórico do commit

git log
git log --oneline //mostra commit em uma só linha, facilitando a visualização

git log --oneline  --decorate  //mostra commit em uma só linha, mostrando o branch e o head do checkout atual

git log --oneline  --decorate  --all //mostra commit em uma só linha, mostrando o branch e o head de todos

git log --oneline  --decorate  --all   --graph //mostra commit em uma só linha, mostrando as branchs estilo gráfico, mostrando a ramificação

git log -p  //ver histórico do commit com detalhes do que foi alterado

Ver histórico pela interface

gitk

Reset de arquivo local


Limpa arquivo modified para situação antes da alteração local:

git checkout <diretório ou arquivo>

Retirar arquivo do staging:

git reset HEAD <diretório ou arquivo>

Desfazer commit local, mantém alterações e arquivos ficam como staged:

git reset --soft <hash do commit anterior>

Desfazer commit local, mantém alterações e arquivos ficam como modified:

git reset --mixed

Desfaz o commit local e as alterações realizadas nos arquivos:

git reset --hard


Criando Ramificaçôes


Verificar as branchs

git branch

Criando nova branch

git branch <Nome_da_nova_branch>

git branch -b <nome_da_nova_branch>  //cria um branch a partir da branch que você esta

Mudando da branch

git checkout <nome_da_branch>

Deletando uma branch

git branch -d <nome_da_branch>

Para apagar o branch remotamente:

git push <nome do origin> <nome do branch> --delete
ou
git branch -dr origin/nome-do-branch       -> -dr  : d- de delete r- de remote

Pega um commit expecifico e aplica numa branch

git cherry-pick <id do commit>


Merge

git merge <nome_da_branch_que_voce_deseja_os_dados>

No Merge, os commits do outro branch são aplicados por cima dos commits do branch atual.

Conflitos, caso esteja usando o ambiente da amil use:

git mergetool -t meld

Rebase

git rebase <nome_da_branch_que_voce_deseja_os_dados>

No Rebase, os seus commits (acima da base) são temporariamente apagados, o branch atual fica exatamente igual ao outro branch e seus commits são aplicados um a um no branch atual.



stash -> esconderijo


Salvar arquivos no stash

git stash save "texto indentificador"

Listar arquivos do stash

git stash list

Recuperando arquivo stash

git stash apply stash@{<referencia_do_arquivo>}  //recupera a referencia do arquivo porem não a apaga do stash

git stash pop   //recupera e arquivo e apaga do stash

Apagar do stash

o comando anterior recupera arquivos do stash porem não apaga eles, caso for necessário use

git stash drop stash@{<referencia_do _arquivo>}

Criar uma branch a partir de um stash

git stash branch <nome_da_nova_branch>


Repositório remotos


Clonando repositório remoto

git clone <endereço_do_repositorio_remoto> [nome da pasta caso queira, e opcional]

Adicionando um repositório remoto a um repositório local

git remote -v  //Lista os repositório remotos

git remote add <nome_do_repositorio_remoto><endereço_do_repositorio_remoto>  /Adiciona um novo repositório


ex:  git remote add origin https://github.com/Uniliva/typescript.git

Salvando e atualizar projeto no repositório remoto

git push -u <nome_do_repositorio_remoto_salvo><Branch>

ex: git push -u origin master
  • Atualizar repositório local com as mudanças do repositório remoto (realiza merge automático - ATENÇÂO)
git pull-u <nome_do_repositorio_remoto_salvo><Branch>
git pull  origin master
  • **Atualizar dados alterado no remoto e atualizar o repositorio local num branch diferente (evitar o merge automatico) **
git fetch <nome_do_repositorio_remoto_salvo> branch <nome do branch>
git fetch origin branch <nome do branch>

o fetch apenas traz as atualização e necessário que você faça um merge para juntar os dados do local com o do remoto.

Submodulos


  • Criando Submobulos
git submodule add <repositorio.git> <nome-da-pasta>
  • Atualizar submodulos
git submodule update

Remove arquivos do historico


  • Exclusão de arquivo localmente
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch caminho/do/arquivo/arquivo.extensao" --prune-empty --tag-name-filter cat -- --all
  • Detalhamento das opções utilizadas:

    • filter-branch: permite reescrever histórico das branches do git
    • --force: força o filter-branch a ser executado
    • --index-filter: opção de filtro para reescrita do índice. Normalmente é utilizado em conjunto com "git rm --cached --ignore-unmatch ...". Serve para apagar o histórico de um arquivo, independente de quando ele surgiu
    • --prune-empty: o filtro pode acabar gerando commits sem alteração, caso somente esse arquivo tenha sido alterado. Essa opção faz com esses commits sejam apagado também
    • --tag-name-filter cat: atualiza também as tags
    • -- --all: repo de branches a serem reescritas. No caso de --all, todas as branches serão consideradas e necessita do -- antes como separação dos parâmetros do filter-branch
    • caminho/do/arquivo/arquivo.extensao: caminho completo até o arquivo que deseja excluir (inclusive o nome e extensão). Caso queira excluir completamente o arquivo, é necessário executar o mesmo comando para qualquer outro caminho onde ele tenha existido (rename, mudança de diretório, etc).
  • Exclusão de diretório localmente

git filter-branch --force --index-filter "git rm -r --cached --ignore-unmatch caminho/do/diretorio" --prune-empty --tag-name-filter cat -- --all

  • Detalhamento das opções utilizadas:

    • -r: exclui recursivamente
    • caminho/do/diretorio: caminho completo até o diretório que deseja excluir. Caso queira excluir completamente o diretório, é necessário executar o mesmo comando para qualquer outro caminho onde ele tenha existido (rename, mudança de diretório, etc).
  • Envio das alterações para todas as branches

git push origin --force –all
  • Detalhamento das opções utilizadas:

    • --force: força o push
    • --all: realizado em todas as branches
  • Envio das alterações para todas as tags

git push origin --force –tags
  • Detalhamento das opções utilizadas:

    • --force: força o push
    • --all: realizado em todas as branches
  • Atualização do repositório após a remoção

git pull –rebase
  • Detalhamento das opções utilizadas:

    • --rebase: realiza o rebase ao invés do merge. Necessário para não apresentar os arquivos como untracked novamente
  • List item

Remover branch deletada da origim no repositorio local

git fetch --all -p; git branch -vv | grep ": gone]" | awk '{ print $1 }' | xargs -n 1 git branch -d