Git

Básicos
  1. Configurar quien soy
  2. Listar ramas existentes: git branch
  3. Cambiar de rama: git checkout <rama_existente>
  4. Crear rama y luego cambiarse a ella con git checkout
  5. Otra manera de cambiar de rama: git switch
  6. Crear rama y luego cambiarse a ella con git switch
  7. Seleccionar que agregar o no
  8. Ver el historial de cambios
  9. Agregar todo lo modificado
  10. Cambiar a un commit particular
  11. Borrar un archivo
  12. Restaurar un archivo eliminado
Arreglar un pull request con conflictos
  1. Estado inicial

Básicos

Configurar quien soy

git config --global user.name "Michi"
git config --global user.email "michi@gmail.com"

Listar ramas existentes: git branch

Ejemplo:

git branch
* main
  feature

Cambiar de rama: git checkout <rama_existente>

Ejemplo:

git checkout feature
Switched to branch 'feature'

Crear rama y luego cambiarse a ella con git checkout

Se debe usar la opción -b.

git checkout -b bug-fixes
Switched to a new branch 'bug-fixes'

Otra manera de cambiar de rama: git switch

Ejemplo:

git switch feature
Switched to branch 'feature'

Crear rama y luego cambiarse a ella con git switch

Se debe usar la opción -c.

git switch -c new-feature
Switched to a new branch 'new-feature'

Seleccionar que agregar o no

Se puede usar:

git add -p

Ver el historial de cambios

git log

Agregar todo lo modificado

git add -A

Otra manera:

git add .

Cambiar a un commit particular

Primero se realiza un git log para elegir el commit al que se quiere ir. Luego se ingresa el siguiente comando Donde <commit> es el elegido del comando anterior.

git checkout <commit>

Borrar un archivo

Donde <archivo> es el archivo a eliminar.

git rm <archivo>

Restaurar un archivo eliminado

Primero:

git reset HEAD <archivo>

Segundo:

git checkout <archivo>

Arreglar un pull request con conflictos

Estado inicial

git-conflict

Supongamos que en la rama feature se está modificando un archivo tal como app.js que contenía el siguiente código de master

//app.js código inicial

const express = require("express");
const { port } = require("./config");
const { connection } = require("./config/db");


connection();

const app = express();

app.use(express.json());



app.listen(port, () => {
  console.log(`Listening on port: ${port}`);
});

Se procede a modifcar el archivo quedando al final tal como:

//app.js código modificado desde rama feature

const express = require("express");
const { port } = require("./config");
const { connection } = require("./config/db");
const auth = require("./routes/auth.routes"); //agregado desde rama feature
const offers = require("./routes/offer.routes"); //agregado desde rama feature
const users = require("./routes/user.routes"); //agregado desde rama feature

connection();

const app = express();

app.use(express.json());

users(app); //agregado desde rama feature
auth(app); //agregado desde rama feature
offers(app); //agregado desde rama feature

app.listen(port, () => {
  console.log(`Listening on port: ${port}`);
});

Paralelamente se está modificando el archivo app.js directamente desde master en las mismas líneas pero diferente código

//app.js código modificado desde rama master

const express = require("express");
const { port } = require("./config");
const { connection } = require("./config/db");
const jobs = require("./routes/jobs.routes"); //agregado desde rama master
const categories = require("./routes/categories.routes"); //agregado desde rama master
const countries = require("./routes/countries.routes"); //agregado desde rama master

connection();

const app = express();

app.use(express.json());

jobs(app); //agregado desde rama master
categories(app); //agregado desde rama master
countries(app); //agregado desde rama master

app.listen(port, () => {
  console.log(`Listening on port: ${port}`);
});

Ahora se quiere unificar las ramas, por lo tanto se procede a hacer el pull request de la rama feature a master

git-conflict

En github nos muestra el siguiente mensaje

git-conflict

Github da la posibilidad de arreglar el conflicto desde su web. Pero se lo puede trabajar localmente.

Primero desde la pc local desde la rama master se ejecuta git pull origin master para traer los cambios que no tenia el repo local.

Luego hay que situarse en la rama conflictiva en este caso es feature y ejecutar git merge master

Graficamente sería:

git-conflict

Luego de arreglado el conflicto

git-conflict

Inmediatamente después de ejecutar el comando git merge master en la rama feature, Visual Studio Code nos ayuda con posibles soluciones. Las cuales aparecen abajo de la línea 3 y línea 19 en este caso.

git-conflict

Se corrige el código. Se procede a realizar el correspondiente commit con su push a su respectiva rama y por último se procede a realizar el merge.

Grafica que brinda github, en la sección de insights

git-conflict