Configurando Git:
Username
git config --global user.name "HLAM"
email
git config --global user.email "[email protected]"
editor padrão(se não configurado ele utiliza vim)
git config --global core.editor (emacs,vim);
exibir configurações utilizadas
git config chave chave = user.name, user.email, core.editor;
git config --list exibe todas as configurações;
ALIAS
git config --global alias.xxx comando
(onde xxx é o que desejar e comando é o comando desejado criar o alias
Ex.: git config --global alias.s status, sempre que der o comando s,
é o mesmo que status);
Gerenciar Pastas:
Criar Pasta Repositório Local:
mkdir nomeDaPasta
Deslocamento Entre Diretórios(cd ou dir):
cd nomeDaPasta entra no diretório;
cd retorna para diretório raiz;
cd .. retorna para diretório anterior;
Obs.: diretório .git contém todos os dados sobre o repositório;
Status Dos Arquivos No Repositório:
untracked arquivo recém adicionado no repositório mas o
git ainda não conhece nenhuma versão deste arquivo;
unmodified arquivo recém adicionado no git porém nunca modificado;
modified arquivo já modificado anteriormente;
staged momento em que é criada a versão do arquivo(commit).
Quando é realizado o commit, o arquivo volta para o modo de unmodified;
Comandos Git:
git init Inicializar Repositório(monitorar alterações do diretório);
ls -la exibe diretórios;
ls exibe arquivos;
git status exibe o status do repositório(em qual branch(diretório),
se existe algum commit pendente);
git add nomeDoArquivo adiciona o arquivo ao repositório;
git add . adiciona o arquivo que não estiver trackeado;
git rm nomeDoArquivo deleta o arquivo do repositório;
git rm -f nomeDoArquivo deleta o arquivo do repositório(force);
git commit -m "comentário" confirma todas alterações e commita(arquivo recém criado);
git commit -am "comentário" confirma todas alterações e commita(arquivo já existente);
git stash quando é editado um arquivo e precisa de ir para outro branch
ou não quer aplicar a edição por faltar finalizar algo, é realizado
o git stash que gera um estado de WIP(work in progress);
git stash apply aplica as edições que foram interrompidas com o git stash;
git stash list lista todos stashs;
git stash clear exclui todos os stashs;
cmd clear ou Ctrl + L limpa prompt;
Log's:
git log exibe todos os commits;
git log --author="Joaquim" somente commits do autor Joaquim;
git log --since=2.weeks somente commits das ultimas 2 semanas;
git log -n exibe os ultimos n commits;
git shortlog exibe um resumo dos commits;
git shortlog -sn exibe somente os nomes de usuário e quantos commits eles realizaram;
git show hash exibe alterações realizadas no commit;
Diferênças Entre Aruivo Unmodified e Modified:
git diff exibe diferenças entre original e o arquivo a ser commitado;
git diff --name-only exibe apenas o nome dos arquivos alterados;
Reset Commit:
git checkout nomeDoArquivo retorna o arquivo modified para unmodified(not staged);
git reset HEAD hash retira arquivo editado do staged(para ser realmente excluído,
executa o checkout após o reset);
git reset --soft hash desfaz o commit e fica a ponto de commitar novamente (staged);
git reset --mixed hash desfaz o commit e volta para modified;
git reset --hard hash acaba com toda edição feita pelo commit e retorna para o commit anterior;
git revert hash retorna a commit anterior sem eliminar o commit atual para futuro debug;
Repositório remoto (GitHub):
git remote add origin https://github.com/hemilioaraujo/cmdGit.git este comando adiciona um repositório remoto,
com o nome origin(pode ser qualquer nome);
git remote rm origin exclui o remoto origin;
git remote rename origin dindon renomeia o remoto origin para dindon;
git remote exibe repositório remoto;
git remote -v exibe repositório remoto e seu endereço;
git push -u origin master copia todos os dados e arquivos master(origem)
para o origin(destino).
O comando -u faz um track, e das próximas vezes,
só é nescessário o git push;
git pull Incorpora as mudanças do repositório remoto para o branch local;
git clone [email protected]:hemilioaraujo/cmdGit.git nomePasta clona repositório do endereço remoto(quando o repositório é pessoal)
quando não se é pessoal é necessário realizar um fork
do repositório para um repositório pessoal;
git tag -a 1.0.0 -m "comentário" gera uma tag de versão, essa tag é criada no github na área de releases.
Nesta área, é possível fazer o download do source code na versão gerada;
git tag exibe todas as tags;
git fetch verifica diferenças entre o repositório local e o remoto;
Gerenciando Chaves SSH:
ls -la ~/.ssh verifica existência de chaves no repositório(id_rsa, id_rsa.pub);
cat id_rsa.pub // more id_rsa.pub // vim id_rsa.pub exibe a chave SSH(tem de ser executado no diretório "~/.ssh");
ssh-keygen -t rsa -b 4096 -C "[email protected]" -> enter 2x gera a chave SSH no repositório local;
Adicionando Chave SSH GitHub:
Copia a chave com o comando cat no diretório "~/.ssh" e acessa https://github.com/settings/keys -> new SSH key -> da um nome e cola a chave;
Branch's(Snapshot):
git checkout -b nomeBranch Cria um novo branch com o nome que quiser;
git branch Exibe os branchs existentes(O * indica posição atual);
git checkout nomeBranchExistente Alterna entre os branchs;
git branch -D nomeBranch Deleta branch selecionado;
Rebase e Merge:
git merge nomeDoBranch Realiza o merge dos branches atual e o que é dado o nome.
O merge gera um commit extra para a junção.
________*_______
/ \
-------*------------------*--------
Representação gráfica do merge;
git rebase nomeDoBranch Realiza o rebase dos branches atual e o que é dado o nome.
O rebase não gera um commit extra e faz uma junção mais "linear".
------*-------*------*-------
Representação gráfica do rebase;
Obs.: É sempre rebase para sincronizar o código do Branch com o master(qusndo não é interessante ter o commit desta sincronização ou junção)
e merge quando for incluir um código de um branch separado (feature) no master e gerar um commit.
.gitignore:
O arquivo .gitignore é usado quando você tem arquivos que são necessários no repositório mas você não quer que eles subam para o repositório
online(track).
Obs.: Dentro do arquivo podem ser adicionados os nomes dos arquivos a não serem trackeados ou até mesmo o tipo de extenção
que não deve ser trackeada.
vim .gitignore gera o arquivo gitignore;
*.json (* = tudo) tudo que for .json não é trackeado;
exemplo.xls O arquivo exemplo.xls não é trackeado;
teste para adicionar imagem ao readme.md: