Git
Básicos
- Configurar quien soy
- Listar ramas existentes: git branch
- Cambiar de rama: git checkout <rama_existente>
- Crear rama y luego cambiarse a ella con git checkout
- Otra manera de cambiar de rama: git switch
- Crear rama y luego cambiarse a ella con git switch
- Seleccionar que agregar o no
- Ver el historial de cambios
- Agregar todo lo modificado
- Cambiar a un commit particular
- Borrar un archivo
- Restaurar un archivo eliminado
Arreglar un pull request con conflictos
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
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
En github nos muestra el siguiente mensaje
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:
Luego de arreglado el conflicto
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.
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