Executando verificação de segurança...
28

Git, o básico que vai fazer você parecer um mestre

Recomendo copiar esse conteudo e usar ele como consulta

Gerenciamento de Versão :

Major.Minor.Patch

IncrementoDescrição
MajorQuebra de funcionalidade
MinorNova Feature
PatchConcerto+Qualquer outra coisa

Comandos Basicos

Iniciar Repositorio

    git init

Checa o status do projeto, o que foi e não foi modificado e o status dos arquivos que estão sendo observados

    git status

Para ver as mensagens de commits

    git log

Mostra um registro de todas as mudanças feitas para o cabeçalho repositorio local

git reflog

Operações com Arquivos

Adicionar uma Arquivo

    git add "nome_do_arquivo"

Adicionar todos os Arquivos

    git add .

Para mover ou renomear arquivo

    git mv <old_file> <new_file>

Para recuperar alterações de um arquivo, ou versões passadas dele, use:
você pode conseguir esse número usando "git log"

    git checkout "numero_da_modificação" -- "nome_do_arquivo"

Commit

Adicionar uma mensagem ao commit

    git commit -m "mensagem"

Para modificar a mensagem do ultimo commit, ele cria um novo commit que subistitui o antigo commit (Fique atento pra não aplicar em commit que já foram dado push):

    git commit "mensagem" --amend

Para modificar o conteudo do ultimo commit, adicionando novo conteudo, mas ele cria um novo commit que subistitui o antigo commit (Fique atento pra não aplicar em commit que já foram dado push):

    git commit --amend --no-edit

Criar um commit que desfaz um commit anterior

    git revert "commit_id"

Diff

Para mostrar as diferenças

    git diff

Para mostrar a diferenã entre dois commits

git diff <commit_id1>..<commit_id2>

Show

E para só ver a ultima modificação use:

    git show

Para ver as modificações feitas em um arquivo, use:

    git show "numero_da_modificaçãos"

Remover

Para remover o arquivo da arvore de trabalho

    git rm "nome_do_arq"

Para remover um arquivo que foi removido mas ainda está operando

    git rm --cached <file_name>

Remover pasta do projeto git

    git rm -rf --cached folder1/

Clean


Serve para limpar o repositorio dos varios arquivos que um build ou coisa do tipo podem criar:

O paretro -n irá mostrar os arquivos que vão ser apagados
O paretro -f irá de fato apagar os arquivos

    git clean -n
    git clean -f

Observar arquivo

Para assumir que um arquivo não é modificado

git update-index --assume-unchanged "arquivo"

Para voltar a monitorar modificações

git update-index --no-assume-unchanged "arquivo"

Reset

Para remover uma arquivo que sem querer foi dado add nele

git reset -- Nome_do_arquivo

Discartar todas as alterações já feitas e mover o cabeçalho para um commit especifico

git reset --hard <commit_id>

Move o cabeçalho para um commit especifico mas preserva as mudanças feitas

git reset --soft <commit_id>

Move o cabeçalho para um numero de commits atras, mas preservando as mudanças feitas

git reset --soft <commit_id> HEAD~int

Tag

Lista todas as tags do projeto

git tag

Cria uma tag apontando pro ultimo commit feito

git tag nome_tag

git tag nome_tag -m "mensagem que acompanha a tag"

Lista todas as tags e suas descrições

git tag -n

Pra mandar um tag pro repositorio usa:

git push origin nome_tag
# manga todas as tags
git push origin --tag

Branchs

Para ver todas as branch que existem no projeto, use:

    git branch

Para criar ramificações(branchs) do código, use:

    git branch "nome_da_branch_nova"

Para deletar uma branch, use:

    git branch -D "nome_da_branch"

Para deletar branch remoto

git push origin -d "nome_da_branch"

Para listar todas as branchs remotas

    git branch -r

Para mudar da branch principal para outra, use:

    git checkout "nome_da_branch"

Para unir o conteudo das branch, use:

    git merge "nome_da_branch"

Cancelar o marge em caso de conflito

    git merge --abort

Operações de Repositorios Remotos

Para listar os repositorios remotos

    git remote

Para adicionar um repositorio remoto

    git remote add "nome" "url"

Para mandar o repositório para o github, use:

    git push

Caso seja a primeira vez que manda algo para o repositório, use:

    git push -u origin master

Para clonar um projeto já iniciado, use:

    git clone "url_do_repositório"

Para trazer as alterações do repositório para o projeto, use:

    git pull

para trazer as alterações do repositorio, mas os commits que form pegos do repositorio vão estar sendo colocados na fila, atras dos meu no repo local

    git pull --rebase

Para poder fazer um rebase, mas sem a necessidade de comitar o que você fez até o momento, você pode fazer o stash, que guarda em separado suas auteraçoes, para que você possa depois de fazer o rebase, aplicar elas denovo

    # Remove e guarda as alterações já feitas
    git stash
    # Lista as alterações armazenadas 
    git stash list
    # Reaplica as ultimas alterações guardas no stash
    git stash pop

Para trazer as alterações do repositório para o projeto, use:

    git pull <remote_name> <remote_branch>

Contribuição, Gitflow

  • pra resolver problemas é criado uma branch

  • Pode se separar o git flow em 2 tipos de branchs

  1. Branches principais
    • Master
    • Developer
  2. Branches de Suporte
    • Feature
    • Release
    • Hotfix

Aplicação

  • Master: é usada para mandar os commit dos release para produção

  • Develop: é criada apartir da Maste e conterá as fetures estaveis que seram mergeadas em uma branche de release

  • Features: É criada através da Develop

  • Nomeação de branch

    feature/nova-feature

Ciclo de vida

Feature

Master[1.0] -> Develop -> Feature -> Develop -> Release -> Master[2.0]

Hotfix

Master[2.0] -> Hotfix -> Master[2.1]

Uso

Para iniciar o uso de gitflow

    git flow init 

Depois você nomeia as branches
Para adicionar feature

    git flow feature start nova-funcao

Para fazer o merge na develop

    git flow feature finish sum

Para fazer uma release

    git flow release start 0.1.0

Para mandar a release para a master

    git flow release finish 0.1.0

EDIT

Me chamaram a atenção pra uma parada que eu acabei deixando passa quando tava escreverndo esse arquigo, os comando relacionados a commit em especial os que modificam commits previos, só recomento usar se os commits em questão não foram mandados pro remoto, pos se for o caso, na hora de enviar o commit modificado, ocorrerá um problema visto que o commit foi sobre escrito pelo novo com as modificações.

Uma solução pra isso, é na hora do push, usar a flag -f, mas não recomendo, a não ser que você seja a unica pessoa mexendo na branch em questão e isso não vá afetar outros membros do seu time (Mas não recomento). Ou você tenha plena confiança que é o certo a se fazer

Carregando publicação patrocinada...
2

Para modificar o conteudo do ultimo commit, adicionando novo conteudo, mas sem ter que criar um novo commit:

git commit --amend --no-edit

Só um detalhe importante: git commit --amend sempre cria um novo commit (ok, quase sempre, mais detalhes abaixo).

Inclusive, isso está descrito na documentação oficial:

--amend

Replace the tip of the current branch by creating a new commit.


Dá pra confirmar com um teste rápido. Suponha que meu commit mais recente é esse:

$ git log --format=fuller -1
commit cc5079bdfbefa1e465caaeeb3ea4cec79922afba (HEAD -> test)
Author:     Fulano <[email protected]>
AuthorDate: 2024-10-21 14:10:58
Commit:     Fulano <[email protected]>
CommitDate: 2024-10-21 14:10:58

    teste

Usei o formato fuller para que ele mostre o CommitDate, em breve entenderemos o motivo.

Em seguida rodei git commit --amend --no-edit, e podemos ver que ele criou outro commit:

$ git log --format=fuller -1
commit 9f4cc75088848b36783b8affd7cb02324dc4d77d (HEAD -> test)
Author:     Fulano <[email protected]>
AuthorDate: 2024-10-21 14:10:58
Commit:     Fulano <[email protected]>
CommitDate: 2024-10-21 14:12:01

    teste

Repare que o hash mudou de cc5079bdfbefa1e465caaeeb3ea4cec79922afba para 9f4cc75088848b36783b8affd7cb02324dc4d77d, ou seja, é outro commit. Isso porque, se qualquer informação do commit mudar, então o hash também muda, e portanto é outro commit. E neste caso a informação que mudou é o CommitDate (embora o AuthorDate continue igual - entenda a diferença aqui).

Ou seja, embora tenha o mesmo comentário, mesmo autor, mesmo conteúdo, etc; como uma das informações mudou, então foi criado outro commit. Portanto fique atento caso vc vá fazer amend em um commit que já foi enviado para o repositório remoto (ou seja, ele já foi enviado em um git push). Isso é inclusive citado no livro oficial:

You need to be careful with this technique because amending changes the SHA-1 of the commit. It’s like a very small rebase — don’t amend your last commit if you’ve already pushed it.


Eu disse anteriormente que --amend quase sempre cria um novo commit. O único caso em que ele não criaria um novo commit é se todas as informações forem iguais.

E tecnicamente é possível fazer o amend usando as mesmas datas.

Por exemplo, se eu tiver este commit:

$ git log --format=fuller -1
commit 430b1d3a14b8b80aaeadabbd2e645c0699f38f71 (HEAD -> test)
Author:     Fulano <[email protected]>
AuthorDate: 2024-10-21 14:22:05
Commit:     Fulano <[email protected]>
CommitDate: 2024-10-21 14:22:05

    teste

E rodar o comando usando as mesmas datas (assumindo que não fiz nenhuma outra alteração):

GIT_COMMITTER_DATE="2024-10-21 14:22:05" git commit --amend --no-edit --date="2024-10-21 14:22:05"

No fim terei "o mesmo commit", ou seja, git log --format=fuller -1 mostrará exatamente o mesmo commit com as mesmas datas.

Lembrando que isso só valerá se eu não mudar nenhuma das outras informações (como a mensagem de commit, author, alterações feitas, etc). Mas como na prática é raro as pessoas se preocuparem em manter a mesma data (e o git log por padrão só mostra o AuthorDate, que não é alterado com o amend, ou seja, dará a impressão que "é o mesmo commit, já que tem a mesma data"), então faz sentido trabalhar com a premissa de que sempre será gerado um novo commit.


Mas se ele cria um novo commit, o que acontece com o anterior? Bem, ele fica "perdido" (o nome técnico é "dangling commit"). Mas vc não precisa se preocupar com ele, pois uma hora o Git irá limpá-lo automaticamente.

1

Sim, você tem razão, ele cria um novo commit, foi uma parada que eu lembrei com seu comentário, no geral não afeta tanto, mas pode ser prejudicial se já foi dado push no commit

2

Usar o Rebase

Ali do Rebase quando você que juntar 2 commits ou mais:
pode fazer assim git rebase i- HEAD~2

Vai abrir no seu terminal assim:
pick 4d57c88 commit 1 pick a9d9034 commit 2

Você usa o s significa squash:
pick 4d57c88 commit 1 s a9d9034 commit 2

Depois você so renomeia a mensagem do commit
This is a combination of 2 commits.

juntar commit 1 + commit 2

Depois você faz o fluxo normal do push

1

Excelente guia meu colega!
Realmente achei muito últil todas essas operações do git, principalmente a de reverter mensagens de commits e até mesmo o conteúdo do mesmo.
Parabéns pela iniciativa e pelo valor agregado a comunidade!

1

Sim, as de correção de commit são muito uteis, principalmente quando fica faltando uma modificação e ela tinha que subir junto do commit anterior

Eu tinha um colega de trabalho que ele não manjava desse comandos, e o hitorico de commit dele, era cheio de micro-commits arrumando erros que tavam no commit anterior

1
1

Git log

Gosto muito de usar o git log -S :string: para procurar um nome de variável e descobrir quantos commits fizeram uma alteração nessa string.

Git reset

Também acho útil o git reset -- para tirar todas as alterações que estão em stage.

1

Git é uma ferramenta do caralho, uns 12 comando e você consegue participar de projetos e viver sua vida plenamente, mas ao mesmo tempo todo dia você descobre um comando novo que facilita sua vida

1

Título do artigo enganou, tem nada de básico isso aí.
Curti o lance de observar ou parar de observar arquivos, achei que dava de fazer só com gitignore.

2

Não é um básico nível 0, mas é basico. O git pode ser muuuuuito mais complexo que isso. Eu sei que pode parecer complexo e muita coisa, mas por isso que eu coloquei no início. Esse artigo vai te servir melhor se você copiar ele e usar como consulta.

0
1
0
0