Arquivo da tag: Git

[GIT] Concentrar commits em um só

Método para concentrar/concatenar vários commits em um só.

Caso você seja uma pessoa que cada mexida em código faz um commit e na hora de versionar, tem dezenas do mesmo, é interessante concentrar os commits em um só ou mais de um para ficar mais claro sua alteração para que na branch de destino não fique poluído.

No caso existe o git squash, que consiste no passo a passo abaixo.

Inicialmente faz um rebase para a branch de destino

git rebase -i main

Após ter feito o rebase... cairá nessa tela onde você escolhe a partir de qual branch quer "deixar"

Normalmente deixamos o primeiro commit como pick e os demais como squash.

Após ter feito isso e salvar e fechar essa tela acima, abrirá uma tela para ver qual comentário você quer deixar. O git já te dá uma prévia de comentário... no caso abaixo eu apaguei todo o comentário e deixei nessa tela apenas "update Account Files with userId". Quando sair cairá na tela abaixo.

Para encerrar, é só dar o comando abaixo para fazer um push force.

git push -f

Feito!

Excelentes Práticas com Git

gitEstou adicionando esse post porque através do Git, consegue-se elevar o nível de trabalho e cuidado com o código.

 

Esse diagrama de estados através de comandos é o princípio básico da ferramenta, e através dele conseguimos abstrair o cotidiano.

Git-transport

Caso precise de algo mais, esse diagrama de atividade abaixo é o ideal. Existe bastante informação e está um pouco bagunçado, mas se você quer seguir em frente na ferramenta, dê pelo menos uma olhada!!!

git-pretty

Todas as imagens foram tiradas da internet e peguei só para eu não precisar ficar procurando.

Enjoy
Marcos Carvalho

[HowTo] – [Git]

git init
Iniciar o versionamento dentro de uma pasta;
Criará um diretório .git;
Para fazer backup com todo histórico, apenas copiar o diretório .git.

git init --bare
Cria o repositório com as mesmas pastas que o git criaria dentro da pasta .git;
A pasta .git não existe nesse cenário;
Cria um repositório sem área de trabalho.

git status
Mostra o Status que está o Working Area e o Índice.

git add <>
Adicionar ao índice;
Dentro do <>, adicionará arquivos, arquivos de um tipo, ou tudo;
. ou * é igual a tudo;
Para arquivos de um tipo. Exp: *.java;
Caso tenha modificado o arquivo depois de ter adicionado ao índice, terá que refazer esse passo.

git add -i
Mostra um menu de opções para trabalhar em cima do Working Area X Índice.

git rm --cached <file>
Retira o arquivo do índice.

git commit -m "Mensagem para o commit que está fazendo. O Mesmo que histórico."
Envia ao repositório;
Grava o conteúdo do índice no repositório.

git commit -a -m "mensagem"
-a funciona para comitar arquivos que já foram modificados e já foram comitados ao menos uma vez.

git checkout --<file>
Caso queira retirar do índice.

git log
Lista os logs.

git log --stat
Mostra o que cada commit foi alterado.

git log --graph
Mostra os logs gráficamente.

gitk --all &
Git gráfico para visualização de logs.

git reset HEAD <>
Retira o arquivo modificado do índice, voltando para o Working Area.

git reset HEAD~1 --hard >
Esse comando retorna para o -1 commit;
--hard > Arranca fora o commit inteiro;
--soft > Ele volta para o Índice.

git commit -m "Teste" --amend
Para adicionar um arquivo no último commit;
Dica: Usar só locamente;
Joga fora o último commit e cria um novo.

.gitignore
Colocar as informações que não deseja versionar;
Ex: *.log >> Nunca versionará os arquivos com extensão .log.

git add target/teste.txt -f
Caso queira versionar mesmo estando configurando no .gitignore.

git reflog
Guarda o que foi-se apagando.

git merge <SHA1>
git merge <branch> > fazer merge com outro branch;
git merge <branch> --squash > Ele pega todos os commits de um branch e coloca no Índice no branch que está.

git clean -f
Pegar arquivos que estão no Working Area e jogam as modificações fora.

git stash
Pega os arquivos do índice e manda para o stash, retornando ao estado inicial do índice.
Usado para quando tem um ambiente estável e quer fazer novas modificações, por exemplo, testes.

git stash list
Mostra as listas que estão no Stash.

git stash apply
Ele pega o que está no stash e joga no índice novamente.

git stash apply stash@{0}
Retorna o último stash ou qualquer um que informou;
O mais recente sempre é o 0.

git stash clear
Apaga todas as listas do stash.

git stash save "<nome>"
Salva o stash com um nome.

git stash pop
Retira do stash, aplica no índice e apaga a lista do stash.

git stash drop <stash>
Retira da lista dos stashes.

  • Convenção

Convencione a não trabalhar-se em cima do Master
Pode-se criar branches. Quantas quiser. Foi feito para ter inúmeras.
Sempre usar.

git branch
Lista as branches.

git branch -a
Mostra todas as branches incluindo os remotos

git branch -d bugfix
Apaga o branch bugfix.

git checkout -b desenvolvimento
Cria um novo branch;
Para ficar indo de um branch para outro, é necessário commitar;
Pega o estado que encontra-se o branch e cria um novo da mesma forma.

git checkout <branch>
Mudando de branch.

git rebase <master>
Trazer o versionanmento do branch informado para o branch que encontra-se;
Tem a função de desfazer o último commit, faz o merge com o branch que informou e commita o commit que tinha desfeito;
A principal função é manter o histórico linear.

git rebase --continue
Para quando não encontra-se em nenhum branch, já retirou o conflito e está querendo commitar.

  • Repositórios Remotos

git clone <.gitRemoto> <repositorio>
Cria um clone do repositório informado para um novo diretório;
Cópia do repositório localmente;
Ex com Http: git clone https://github.com/marcoscarvalho/<path>.git <diretorio>

git remote
Lista os Repositórios remotos;

git remote show origin
Mostra o local da onde foi feito o clone;
"origin" é uma convenção para o primeiro remote/clone.

git remote add <nome> <url>
Adicionar novos repositórios remotos.

git remote rm <nomeRemote>
Desfaz a interligação com os outros repositórios.

git branch -b <novoBranch> origin/<velhoBranchDoQueVoceClonou>
Cria-se o branch a partir do branch clonado.

git push <remote> <branchRemoto>
Empurra para um branch remoto.

git pull <remote> <branchRemoto>
Puxa o repositório a partir do branch informado.

git fetch <remote> <branchRemoto>
Puxa novos commits do repo remoto para a branch especial <remote>/<branch>

git remote add <nome> <user>@<server>:<pasta>/<repositorio>
Adiciona um repositório externo

Enjoy
Marcos Carvalho

[HowTo] – [Git] Trabalhando com Repositório Central

  • Forma 1 - linear e parecida com a do SVN

git fetch ou git pull
Exp: git fetch origin/master;

git rebase ou git merge
Exp: git merge origin/master ou git rebase origin/master
git push

  • Forma 2 - Não desenvolver no master.
  • Criar novos branches.
  • git checkout no repositorio clonado.
  • Ex: git checkout -b bugfix

  • Depois que tiver terminado a correção do bug, sincronizar o master
  • No branch bugfix, dar rebase.
  • Ex: git rebase

  • no branch master, fazer merge para trazer as correções.
  • Ex: git merge bugfix

    git push origin master

  • Desfazer do branch.
  • Ex: git branch -d bugfix

    Enjoy
    Marcos Carvalho

    [HowTo] – [Git] Colaboração

    • Depois que tiver recebido uma invocação que alguém fez alguma melhoria, é necessário validar e aprovar.
    • Você verá novos repositórios clonados a partir do seu.
    • Baixar as melhorias, validar e disponibilizar novamente.

    git remote add <remote> <url>
    <remote> é interessante você salvar o nome do usuário.
    <url> read-only.

    • É recomendável criar um novo branch para validação e aprovação.

    git fetch <remote>
    Baixando as informações.

    git branch -a
    Mostrar todas as branches nos seus devidos lugares.

    git diff <forkRemoteRepositorio>/<branch>
    Para visualizar as diferenças do fork com o original, a partir da branch que se encontra.

    git merge <forkRemoteRepositorio>/<branch>
    Aceitando as alterações.
    Entre nos arquivos que deram conflitos para tirar as cláusulas que estão conflitantes. Salve.

    git commit
    Commit do merge a partir do fork.

    git push <remote> <branch>
    Empurre para o repositório original.

    Enjoy
    Marcos Carvalho

    [HowTo] – [Git] Colaboração com Tickets

    git format-patch master --stdout > <arquivo>.diff
    Novo arquivo com as diferenças.

    • Mandar esse arquivo para o dono;
    • O Dono criará um novo branch e a partir desse, validará se as modificações aperfeiçoam o projeto e aceitar o commit disponibilizando para a comunidade.

    git am <arquivo>.diff
    É aplicado o diff com o commit.
    Como se tivesse recebido o commit.

    git checkout <branch>
    Voltar para um branch. Ex: master;

    git merge <branchCriadoAcima>

    git push origin <branch>
    <branch> normalmente é o master

    Enjoy
    Marcos Carvalho

    [HowTo] – [Git] Tags

    • Demarcar momentos

    git tag <nome>
    Ex: git tag v1.0

    git push <remote> <nomeTag>
    Ex: git push origin v1.0

    Caso crie uma tag dentro de um branch e você delete esse branch, a tag não será apagada.

    git push <tag>
    Empurra a tag para o server.

    git push --tags
    manda as tags para o server.

    git checkout -b <branch> <TAG>
    Cria um branch a partir da tag.

    Enjoy
    Marcos Carvalho

    [HowTo] – [Git] Logs

    git log
    order by created desc
    SHA1
    Autor
    Commit
    Date

    git log --stat
    Mostra quais arquivos foram modificados e o que mudou.
    + Entrou Linhas
    - Saíram linhas

    git log --pretty=oneline
    Mostra apenas 1 linha para cada commit.

    git log --pretty=format:"%an %ad %h %s"
    author
    date
    abreviação do hash
    subject
    Ex: git log --pretty=format:"[%an %ad] %h - %s"

    git log --graph
    Mostra os logs graficamente

    git log --since=<Date>
    Mostra desde algum tempo
    Ex: git log --since=30.minutes
    Ex: git log --since=1.hour
    Ex: git log --since=2.hours
    Ex: git log --since=2.weeks
    Ex: git log --since=2.hours --until=3.hours

    git log --author
    .
    .
    .

    E assim por diante

    Enjoy
    Marcos Carvalho

    [HowTo] – [Git] Subversion

    • Não tem branches. Ter cuidado.
    • Manter sempre o master em sincronia com o svn.

    git svn clone svn://<url>/<repositorio> <diretorio>
    clona o repositório svn.

    git commit

    git svn dcommit
    manda o commit de volta ao repositório.

  • Para fazer update
  • git svn fetch

  • Para fazer merge
  • git svn merge <branch>
    Ex: git svn merge git-svn

  • Adicionando no GitHub
  • git remote add <repositorio>[email protected]:<user>/<pasta>

    Enjoy
    Marcos Carvalho