https://github.com/rafaelblum/demo-git-github
Projeto com objetivo de mostrar o funcionamento do sistemas de controle de versão Git, com seus comandos `basicos` aos `avançado`, conecxão com github via chave SSH e como subir os projetos para github e suas alterações.
https://github.com/rafaelblum/demo-git-github
commit git github laravel merge ssh
Last synced: about 2 months ago
JSON representation
Projeto com objetivo de mostrar o funcionamento do sistemas de controle de versão Git, com seus comandos `basicos` aos `avançado`, conecxão com github via chave SSH e como subir os projetos para github e suas alterações.
- Host: GitHub
- URL: https://github.com/rafaelblum/demo-git-github
- Owner: RafaelBlum
- Created: 2022-11-27T20:41:55.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2024-03-10T15:37:56.000Z (over 2 years ago)
- Last Synced: 2025-01-08T07:28:34.170Z (over 1 year ago)
- Topics: commit, git, github, laravel, merge, ssh
- Language: PHP
- Homepage:
- Size: 12.5 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Demo trabalhando com versionamento em seus projetos
# :receipt: Introdução
Projeto com objetivo de mostrar de forma básica o `funcionamento do sistemas de controle de versão com Git`,
seus comandos de inicialização de repositório local, commits, push, merge, pull e muitos outros. Vou também demonstrar a conecxão
com github via chave `SSH`, para poder `subir os projetos para github`.
## :pushpin: Installation
:speech_balloon: Para trabalhar com controle de versão, você vai precisar:
> Instalar o [`Git`](https://git-scm.com/)
> Criar uma conta no [`GitHub`](https://github.com/)
### :zap: Configurações de variaveis globais
:speech_balloon: É importante nos identificarmos para o Git, Definindo nome de usuario e endereço de e-mail para os commits.
- git config --global user.name "Fulano da Silva"
- git config --global user.email fulanodasilva.git@gmail.com
- Pode verificar todos dados com comando `git config –list`.
### :zap: Comandos basicos para versionamento de repositório local para github
:speech_balloon: Iniciando repositório local
- O `git init` é o primeiro comando que devemos realizar para iniciar o controle de versão, pois é com este comando,
que iniciamos o repositório local.
- O `git status` verifica o status atual do repositório criado para o projeto.
- O `git log` verifica e passa uma lista de todos commits realizado no repositório e com varios dados como `hash` do commit, autor, data `branch`.
- O `git add` coloca os arquivos não preparados, monitorados na área de preparação `staging area`. E o add pode ser arquivo por arquivo `git add name.txt` ou todos `git add .`.
- O `git commit -m ":tada: Commit message"` registra alterações no repositório git salvando uma mensagem de log junto com um `id hash` do commit.
```
git init
git status
git log
git add .
git commit -m ":tada: first commit"
```
### :zap: Conexão git e github com chave SSH
:speech_balloon: Você pode usar SSH para realizar operações Git em repositórios em GitHub.com. Para obter mais informações,
consulte [Sobre SSH :old_key:](https://docs.github.com/pt/authentication/connecting-to-github-with-ssh) ou [add ssh key](https://docs.github.com/pt/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account?platform=windows).
Se você tiver uma chave :key: SSH existente, poderá usá-la para autenticar operações do Git por SSH.
> Com o Git Bash aberto execute:
```
ssh-keygen -t ed25519 -C "your_email@example.com"
```
:speech_balloon: Quando você for solicitado a `Inserir um arquivo no qual salvar a chave`, pressione `Enter` para aceitar o local padrão
do arquivo.Observe que, se você criou chaves SSH anteriormente, o ssh-keygen pode solicitar que você reescreva outra chave;
nesse caso, recomendo a criação de uma chave SSH com nome personalizado. Para fazer isso, digite o local padrão
do arquivo e substitua id_ssh_keyname pelo nome de sua chave personalizada.
Por fim, `precisa copiar a chave` para depois ir em sua conta no github para `criar a nova conexão SSH`. Obs:
`O comando abaixo você precisa estar no diretório certo para fazer o copy`.
```
clip < ~/.ssh/id_ed25519.pub
```
## :pushpin: Padrões de commits
:speech_balloon: De acordo com a documentação do **[Conventional Commits](https://www.conventionalcommits.org/pt-br)**, commits semânticos
são uma convenção simples para ser utilizada nas mensagens de commit. Essa convenção define um conjunto de regras para
criar um histórico de commit explícito, o que facilita a criação de ferramentas automatizadas. Esses commits auxiliarão
você e sua equipe a entenderem de forma facilitada quais alterações foram realizadas no trecho de código que foi commitado.
### :zap: Tipo e descrição
:speech_balloon: O commit semântico possui os elementos estruturais abaixo (tipos), que informam a intenção do seu commit ao utilizador(a) de seu código.
- `feat`- Commits do tipo feat indicam que seu trecho de código está incluindo um **novo recurso** (se relaciona com o MINOR do versionamento semântico).
- `fix` - Commits do tipo fix indicam que seu trecho de código commitado está **solucionando um problema** (bug fix), (se relaciona com o PATCH do versionamento semântico).
- `docs` - Commits do tipo docs indicam que houveram **mudanças na documentação**, como por exemplo no Readme do seu repositório. (Não inclui alterações em código).
- `test` - Commits do tipo test são utilizados quando são realizadas **alterações em testes**, seja criando, alterando ou excluindo testes unitários. (Não inclui alterações em código)
- `build` - Commits do tipo build são utilizados quando são realizadas modificações em **arquivos de build e dependências**.
- `perf` - Commits do tipo perf servem para identificar quaisquer alterações de código que estejam relacionadas a **performance**.
- `style` - Commits do tipo style indicam que houveram alterações referentes a **formatações de código**, semicolons, trailing spaces, lint... (Não inclui alterações em código).
- `refactor` - Commits do tipo refactor referem-se a mudanças devido a **refatorações que não alterem sua funcionalidade**, como por exemplo, uma alteração no formato como é processada determinada parte da tela, mas que manteve a mesma funcionalidade, ou melhorias de performance devido a um code review.
- `chore` - Commits do tipo chore indicam **atualizações de tarefas** de build, configurações de administrador, pacotes... como por exemplo adicionar um pacote no gitignore. (Não inclui alterações em código)
- `ci` - Commits do tipo ci indicam mudanças relacionadas a **integração contínua** (_continuous integration_).
### :zap: Padrões de emojis
Tipo do commit
Emoji
Palavra-chave
Acessibilidade
♿ :wheelchair:
Adicionando um teste
✅ :white_check_mark:
test
Adicionando uma dependência
➕ :heavy_plus_sign:
build
Alterações de revisão de código
👌 :ok_hand:
style
Animações e transições
💫 :dizzy:
Bugfix
🐛 :bug:
fix
Comentários
💡 :bulb:
docs
Commit inicial
🎉 :tada:
init
Configuração
🔧 :wrench:
chore
Deploy
🚀 :rocket:
Documentação
📚 :books:
docs
Em progresso
🚧 :construction:
Estilização de interface
💄 :lipstick:
feat
Infraestrutura
🧱 :bricks:
ci
Lista de ideias (tasks)
🔜 :soon:
Mover/Renomear
🚚 :truck:
chore
Novo recurso
✨ :sparkles:
feat
Package.json em JS
📦 :package:
build
Performance
⚡ :zap:
perf
Refatoração
♻️ :recycle:
refactor
Removendo um arquivo
🔥 :fire:
Removendo uma dependência
➖ :heavy_minus_sign:
build
Responsividade
📱 :iphone:
Revertendo mudanças
💥 :boom:
fix
Segurança
🔒️ :lock:
SEO
🔍️ :mag:
Tag de versão
🔖 :bookmark:
Teste de aprovação
✔️ :heavy_check_mark:
test
Testes
🧪 :test_tube:
test
Texto
📝 :pencil:
Tipagem
🏷️ :label:
Tratamento de erros
🥅 :goal_net:
#### :test_tube: Exemplos
Comando Git
Resultado no GitHub
git commit -m ":tada: Commit inicial"
🎉 Commit inicial
git commit -m ":books: docs: Atualizaçao do README"
📚 docs: Atualizaçao do README
git commit -m ":bug: fix: Loop infinito na linha 50"
🐛 fix: Loop infinito na linha 50
git commit -m ":sparkles: feat: Pagina de login"
✨ feat: Pagina de login
git commit -m ":bricks: ci: Modificaçao no Dockerfile"
🧱 ci: Modificaçao no Dockerfile
git commit -m ":recycle: refactor: Passando para arrow functions"
♻️ refactor: Passando para arrow functions
git commit -m ":zap: perf: Melhoria no tempo de resposta"
⚡ perf: Melhoria no tempo de resposta
git commit -m ":boom: fix: Revertendo mudanças ineficientes"
💥 fix: Revertendo mudanças ineficientes
git commit -m ":lipstick: feat: Estilizaçao CSS do formulario"
💄 feat: Estilizaçao CSS do formulario
git commit -m ":test_tube: test: Criando novo teste"
🧪 test: Criando novo teste
git commit -m ":bulb: docs: Comentários sobre a função LoremIpsum( )"
💡 docs: Comentários sobre a função LoremIpsum( )
## :receipt: Iniciando repositório **local para subir no servidor github**
### :zap: Como `clonar` um repositório do servidor do `github`:question:
:speech_balloon: Adicionamos o comando `git clone ` + `ssh code` do repositório github. Conforme abaixo, vamos baixar o projeto em um diretório.
```
git clone git@github.com:RafaelBlum/demo-git-github.git
```
:speech_balloon: Podemos também definir uma pasta ao clonar um repositório.
```
git clone git@github.com:RafaelBlum/demo-git-github.git nomeDiretório
```
:speech_balloon: Depois de cria a chave, basta criar um repositório no github e seguir os comandos abaixo.
```
git remote add origin git@github.com:RafaelBlum/demo-git-github.git
git branch -M main
git push -u origin main
```
:speech_balloon: Como enviar as alterações realizadas no seu projeto.
```
git status
git add .
git commit -m "Alterações na feature x"
git push
```
#### Mensagens de pré e pós commits
- :heavy_check_mark: Untracked files `Arquivos não rastreados no controle de vesão`
- :heavy_check_mark: Changes to be committed `Arquivos rastreados no controle de versão`
- :heavy_check_mark: Changes not staged for committed `Arquivos rastreados, mas com alterações`
#### Histórico de commits e alterações
```
git log
git reflog
git log --stat
git log --oneline
```
#### Alterando a mensagem do commit
- Definindo `-m` você pode editar a mensagem sem abrir o editor
```
git commit --amend -m "mensagem de correção aqui"
```
#### Mostra o conteúdo que foi alterado, mas antes do commit
```
gif diff
```
#### Mostra arquivo que foi alterado, mas antes do commit
```
gif diff --name-only
```
#### Remove alterações realizadas em algum arquivo especifico
```
git checkout HEAD -- style.css
```
#### Como voltar para alguma alteração commitada `voltar na sua linha do tempo`
```
git reflog
git reset --hard id_commit
```
#### Revertendo um commit feito
- É importante entender que git revert desfaz um único commit — ele
não "reverte" ao estado anterior de um projeto removendo todos os commits subsequentes.
- No Git, isso é chamado de redefinição, não de reversão.
```
git revert id_commit
```
## :zap: Branchs
#### Trabalhando nas linhas do tempo.
:speech_balloon: Como podemos ver, trabalhar com git é como se estivessemos em uma `máquina do tempo`, onde `podemos voltar` na nossa linha do
tempo, o que chamamos de `commits`, voltando no inicio do projeto ou em qulquer momento.
Agora vamos utilizar outro poder do tempo, o poder de criar uma `linha do tempo em paralelo`, o que chamamos de `branchs`.
Estas linhas, branchs, usamos quando vamos desenvolver uma feature nova ou quando vamos `trabalhar em equipe`, pois assim
todos podemos trabalhar em uma parte do projeto sem que haja problemas em nosso projeto que está funcionando corretamente.
> Desta forma, podemos ter um desenvolvedor trabalhando na branch 2, na página de produtos e outro desenvolvedor trabalhando na branch 1, com a Home.
#### Verificar qual branch esta ativo e quais existem
```
git branch
```
#### Como criar um branch `linha do tempo`
```
git branch new_feature
```
#### Como passar para uma branch `linha do tempo`
```
git checkout new_feature
git branch
```
##### ou podemos criar a branch e já passr para ela.
```
git checkout -b new_feature
```
:speech_balloon: Agora temos duas linhas do tempo `main` e `new_feature`. Podemos subir mais uma Branch para github (remoto).
```
Git push origin branch-name
```
#### Remover uma branch remoto
```
Git push origin :branch-name
```
#### Remover branch local
```
Git branch –D branch-name
```
#### Como fazer Git Merge e pull
:speech_balloon: Antes de fazer o `merge` é importante fazer um `pull` no projeto `remoto Github`, puxando e atulizando para o projeto local, pois
pode acontecer de outro desenvolvedor tenha modificado algo, então na branch `main`.
```
git pull origin branch-name
git push --set-upstream origin branch-name
```
Agora sim, podemos fazer o merge
```
git branch
git merge branch_name
```
`Ex:` Uma empresa pede para o desenvolvedor `criar um sistema de login`, mas ele não pode afetar o sistema principal ou o desenvolvimento
dos outros desenvolvedores. E ao finalizar, ele deve passar seu código para um `pull request`.
Se você quiser `criar um branch e fazer o checkout` ao mesmo tempo, use o comando git checkout. O parâmetro `-b` especifica o nome do branch.
Criou um nova branch `copiando a main`
```
git checkout -b sistema-de-login main
```
Agora alteramos para a branch que queremos atualizar `merge`.
```
git checkout main
git pull
git merge sistema-de-login
git push
```
Depois de pronta a nova feature e enviada a branch nova para github, você no github, vai criar uma pull request que será aprovada ou não pela equipe.
## :zap: Pull - `Trabalhando na mesma branch`
:speech_balloon: Algumas vezes podemos trabalhar na mesma branch e computadores dferentes ou com outros usuários e antes de iniciair, precisamos
atualizar o código para o atual no github, conforme os commits forem sendo realizados.
O comando abaixo do `git atualizar os arquivos do repositório remoto`.
Execute:
```
git pull
```
Caso o git pull gere uma :x:mensagem:x:
>error:x:: Your local changes to the following files would be overwritten by merge
>...
>Please commit your changes or stash them before you merge.
>Aborting
A :heavy_check_mark: `solução` que pode ser feita: Utilizar um `git stash` para gravar o estado atual do seu repositório local, revertendo os
arquivos para o estado atual do repositório remoto.
```
git stash push --include-untracked
```
E agora sim o `pull irá funcionar`:
```
git pull
```
#### 💻 Comandos indice gerais
Comando Git
Descrição
git init
:label: cria novo repositório local
git clone http://repositorio-exemple.git
:label: copia repositório local
git status
:label: Mostra arquivos alterados no diretório de trabalho
git diff
:label: mudanças em arquivos rastreados
git add .
:label: adiciona todas mudanças para o proximo commit
git add . -p < file >
:label: adiciona algumas mudanças destes arquivos para o commit
git commit -a
:label: Confirma todas alterações locais em arquivos rastreados
git commit
:label: comfirma alterações
git commit --amend
:label: muda o último commit
git log
:label: Mostra todos commit iniciando pelo mais novo
git log -p < file >
:label: mostra todas mudanças ao longo do tempo em um arquivo especific
git blade < file >
:label: Mostra que alterou, quem e quando
git branch -av
:label: Lista todas branchs existens
git checkout < branch >
:label: Muda para a branch selecionada
git branch < name-branch >
:label: cria uma branch
git branch -D name-branch
:label: deleta branch
git tag name
:label: cria uma tag
git tag
:label: mostra as tags, que representam algumas mudanças significativas no seu código
git push --tags
:label: publica todas tags criadas.
### Contatos
Contatos 👇🏼 [rafaelblum_digital@hotmail.com]
[](https://www.youtube.com/channel/UCMvtn8HZ12Ud-sdkY5KzTog)
[](https://www.instagram.com/rafablum_/)
[](https://twitter.com/universoCode)
[](https://www.linkedin.com/in/rafael-blum-237133114/)
[](https://github.com/RafaelBlum)
Adoro me conectar com pessoas diferentes, então se você quiser dizer oi, ficarei feliz em conhecê-lo mais! :)