An open API service indexing awesome lists of open source software.

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.

Awesome Lists containing this project

README

          



logo header

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.



time machine

: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
```



time machine

: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
```



merge

`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.



merge

## :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]

[![Youtube Badge](https://img.shields.io/badge/-Youtube-FF0000?style=flat-square&labelColor=FF0000&logo=youtube&logoColor=white&link=https://www.youtube.com/channel/UCMvtn8HZ12Ud-sdkY5KzTog)](https://www.youtube.com/channel/UCMvtn8HZ12Ud-sdkY5KzTog)
[![Instagram Badge](https://img.shields.io/badge/-rafablum_-violet?style=flat-square&logo=Instagram&logoColor=white&link=https://www.instagram.com/rafablum_/)](https://www.instagram.com/rafablum_/)
[![Twitter: universoCode](https://img.shields.io/twitter/follow/universoCode?style=social)](https://twitter.com/universoCode)
[![Linkedin: RafaelBlum](https://img.shields.io/badge/-RafaelBlum-blue?style=flat-square&logo=Linkedin&logoColor=white&link=https://www.linkedin.com/in/rafael-blum-237133114/)](https://www.linkedin.com/in/rafael-blum-237133114/)
[![GitHub RafaelBlum](https://img.shields.io/github/followers/RafaelBlum?label=follow&style=social)](https://github.com/RafaelBlum)


Adoro me conectar com pessoas diferentes, então se você quiser dizer oi, ficarei feliz em conhecê-lo mais! :)