Giter Site home page Giter Site logo

git-tips's Introduction

Git Tips

馃摑 Git Tips es un listado de casos de uso, ejemplos y consejos pr谩cticos y f谩ciles de entender sobre Git y Gitflow.



馃敄 Descripci贸n

Git fue dise帽ado por Linus Torvalds y creado pensando en la eficiencia y la confiabilidad del mantenimiento de versiones de aplicaciones cuando estas tienen un gran n煤mero de archivos de c贸digo fuente.

Git nos permite trabajar en proyectos de software independientemente del lenguaje que utilicemos y del n煤mero de personas que trabajen en 茅l. Podr谩s gestionar todos los estados de progresi贸n de cada proyecto creando ramas para desarrollar nuevas caracter铆sticas concretas para la resoluci贸n de bugs, para desplegar en entornos concretos entre otras tareas.

Por otro lado, Gitflow no es m谩s que una gu铆a o workflow introducido por Vincent Driessen con el que conseguimos estandarizar el flujo de trabajo dentro del proyecto y del equipo y de esta forma poder trabajar de forma ordenada seg煤n el tipo de tarea que estemos llevando a cabo en nuestro proyecto y podemos clasificarlas en ramas principales y ramas de soporte.

Estados de Git

Estado 1 -> Working Directory (Directorio de trabajo local)
Estado 2 -> Staging Area (Area de preparaci贸n local)
Estado 3 -> Local Repository (Repositorio local o directorio Git)

States

El flujo de trabajo b谩sico en Git es algo as铆:
1.- Modificas una serie de archivos en tu directorio de trabajo.
2.- Preparas los archivos, a帽adi茅ndolos a tu 谩rea de preparaci贸n.
3.- Confirmas los cambios, lo que toma los archivos tal y como est谩n en el 谩rea de preparaci贸n y almacena esa copia instant谩nea de manera permanente en tu directorio de Git.

Es importante que accedas y te leas detenidamente la informaci贸n de Fundamentos de Git antes de comenzar a realizar todos los casos de uso que ver谩s a continuaci贸n.

Casos de uso y comandos de Git

Configurar nombre y email

Configura un nombre de usuario:

git config --global user.name "JoseJPR"

Configura un email:

git config --global user.email "[email protected]"

Ver nuestra configuraci贸n de git

Muestra la configuraci贸n de tu git:

git config --list

Iniciar repositorio en carpeta actual

Inicias un repositorio local:

git init 

A帽adir archivos al Estado 2

A帽ade archivos al Estado 2:

git add archivo.txt

Si tenemos dos o mas archivos podemos utilizar el flag --all para a帽adirlos todos con un solo comando:

git add --all

Ver el estado de los archivos

Muestra que archivos est谩n a帽adidos al Estado 2 y cuales no:

git status

Restaurar version anterior de un archivo en Estado 1

Imagina que has modificado el archivo.txt (has a帽adido un "Hola"), podr谩s revertir estos cambios con (Es igual a git checkout -- archivo.txt):

git restore archivo.txt

A帽adir la referencia de un repositorio remoto (Github por ejemplo) a nuestro local

Imagina que has creado un repositorio remoto y quieres agregar la referencia al repositorio local:

git remote add origin https://github.com/JoseJPR/practicas-git

Ver que repositorio remoto tenemos asignado a nuestro Working Directory local

Quizas a futuro te sea necesario revisar el listado de los repositorios remotos tienes asignados a tu repositorio local:

git remote -v

Subir c贸digo actualizado a una rama remota

Imagina que quieres alojar tu c贸digo en el repositorio remoto (siendo master la rama remota):

git push origin master

Obt茅n c贸digo actualizado de la rama remota

Imagina que quieres obtener el c贸digo desde el repositorio remoto (siendo master la rama remota):

git pull origin master

Ver ramas locales y remotas

Ver ramas locales:

git branch

Ver ramas remotas:

git branch -r

Ver ramas locales y remotas:

git branch -a

Limpiar todos los archivos que a煤n no hayan pasado al Estado 2

Imagina que has creado un archivo nuevo llamado "archivo-nuevo.txt" y nunca ha sido a帽adio al Estado 2.

Elimina ese archivo y todos los que haya en el workspace que no hayan pasado nunca a Estado 2:

git clean -f

Muestra informaci贸n de los archivo que ser谩n eliminados:

git clean -n

Eliminar archivos concretos

Imagina que tienes el archivo "archivo-test.txt" en Estado 1. Tendr谩s que realizar un borrado de sistema rm -r (Mac o Ubuntu) del (Win):

rm -r archivo-test.txt
del archivo-test.txt

Imagina que tienes el archivo "archivo-test.txt" en Estado 2. Elimina el archivo del espacio de trabajo y del Estado 2:

git rm -f archivo-test.txt

Imagina que tienes el archivo "archivo-test.txt" en Estado 3. Elimina el archivo del espacio de trabajo, colocar谩 una modificaci贸n (archivo eliminado) en el Estado 2 y estar谩 a la espera de ser commiteado este cambio al Estado 3:

git rm archivo-test.txt

Restaurar archivo eliminados

Imagina que has eliminado el archivo "archivo-test.txt" que estaba en Estado 2:

git restore archivo-test.txt

Imagina que has eliminado el archivo "archivo-test.txt" que estaba en Estado 3. Recupera el archivo eliminado y lo coloca en Estado 2:

git restore --staged archivo-test.txt

Recupera el archivo eliminado y lo situa de nuevo en Estado 3:

git restore archivo-test.txt

Restablecer los archivos de Estado 2 a Estado 1

Imagina que necesitas quitar todos los archivos que has a帽adido al Estado 2 y los restablece al Estado 1:

git reset HEAD

Imagina que tienes que hacer lo anterior pero s贸lo con el archivo "archivo-test.txt":

git reset HEAD archivo-test.txt

Revertir commits

Imagina que quieres volver a un estado anterior teniendo en cuenta un commit concreto.

Visualiza el listado de commits de la rama actual:

git log

Revierte nuestro estado actual al que ten铆amos en el commit seleccionado:

git revert {id del commit}

A帽ade todos los archivos revertidos:

git add *

Realizamos un nuevo commit dejando constancia:

git commit -m "Hemos revertido hasta el commit xxx"

Renombrar archivos

Imagina que tenemos dos archivos, uno llamado "archivo-test.txt" y queremos renombrarlo a "archivo-test-2.txt":

git mv archivo-test.txt archivo-test-2.txt

Esto realmente lo que hace es:

mv archivo-test.txt archivo-test-2.txt && git add archivo-test-2.txt && git rm archivo-test.txt

Trabajar con ramas

Para mostrar el listado de ramas que tenemos utiliza:

git branch

Para crear una rama utiliza:

git branch nueva-rama

Para eliminar una rama utiliza:

git branch -d nueva-rama

Para modificar el nombre de una rama utiliza:

git branch -m antiguo-nombre-rama nuevo-nombre-rama

Viajar en el tiempo

Si hacemos git log veremos todos los commits de la rama actual y podremos obtener el identificador de un commit anterior.

Imagina que tienes un commit con identificador "49f3733f9786b8d0a1d88f19ac429164d21e45ff", para viajar a ese commit utiliza:

git checkout 49f3733f9786b8d0a1d88f19ac429164d21e45ff

Imagina que quieres volver al 煤ltimo commit de la rama, utilizaremos la misma sentencia pero a帽adiendo el nombre de la rama, por ejemplo "main":

git checkout main

Moverse entre ramas

Imagina que necesitas moverte desde la rama "main" a la rama "develop":

git checkout develop

Crear una rama y moverse con un s贸lo comando

Imagina que necesitas crear una nueva rama con el nombre "nueva-rama" y quieres moverte en el mismo comando:

git checkout -b nueva-rama

Enlazar Ramas con Merge

Imagina que est谩s trabajando con dos ramas, una "develop" y otra "feature-nuevo" y quieres llevar todos tus cambios desde "feature-nuevo" a la rama "develop".

Tienes que situarte en la rama develop:

$git checkout develop

Tienes que traerte todos los cambios a develop:

git merge feature-nuevo

Alojar cambios en stash para no tener que realizar commit.

Imagina que tienes varios cambios que estas realizando en tu rama pero un compa帽ero te comenta que necesita que te cambies de rama para revisarle un desarrollo pero NO quieres realizar commits de tus cambios. Existe algo que se llama stash, una pila de cambios, que puedes utilizar para almacenar temporalmente cambios.

Para almacenar cambios en stash utiliza:

git stash

Para obtener los cambios de la pila, uno a uno utiliza:

git stash pop

Para limpiar todos los cambios que est茅n en stash utiliza:

git stash clear

Para ver el listado de elementos en stash utiliza:

git stash list

Trabajar con TAGs.

Podemos crear Tags ligeros o tags con metadatos.

Para crear un tag ligero utiliza:

git tag nombre_del_tag

Para crear tags con metadatos a帽adidos utiliza:

git tag -a v1.0.0 -m "Comentario del TAG"

Para crear tags con metadatos a帽adidos de un commit concreto utiliza:

git tag -a v1.0.1 -m "Comentario del TAG" 49f3733f9786b8d0a1d88f19ac429164d21e45ff

Para ver el listado de tags utiliza:

git tag

Para moverte a un tag concreto utiliza:

git checkout nombre_del_tag

Para eliminar un tag concreto utiliza:

git tag -d nombre_del_tag

Si necesitas subir un tag a tu repositorio remoto utiliza:

git push origin master --tags

Trabajar con repositorios remotos

Imagina que necesitas listar los repositorios remotos agregados a tu local:

git remote

Puedes visualizar m谩s informaci贸n, por ejemplo la url del repositorio remoto utilizando:

git remote -v

Asignar un repositorio o m谩s remotos a tu local

Imagina que quieres trabajar con github o gitlab, necesitas asignar un repositorio remoto a tu repositorio local:

git remote add origin https://github.com/JoseJPR/practicas-git
git remote add external https://github.com/JoseJPR/practicas-git-2

Podemos utilizar origin o upstream ya que son convenci贸n pero podemo utilizar el nombre local que queramos por ejemplo:

git remote add external https://github.com/JoseJPR/practicas-git
git remote add external https://github.com/JoseJPR/practicas-git-2

Es posible tener dos repositorios remotos asignados a uno local, solo tienes que ejecutar la sentencia git remote add y agregar los dos, uno por cada ejecuci贸n de la sentencia, por ejemplo:

git remote add origin https://github.com/JoseJPR/practicas-git
git remote add external https://github.com/JoseJPR/practicas-git-2

Descargar informaci贸n y archivos a tu local

Con git fetch puedes actualizar los metadatos de nuestro repositorio en estado 3 origin/x en local y nos descargamos los archivos:

git fetch

Imagina que necesitas obtener los cambios a tu repositorio local en estado 1, tienes que hacer un merge utilizando:

git merge origin/x

Con git pull te ahorras un paso ya que hace los dos en uno, descarga metadatos y archivos y los mergea con nuestra rama local:

git pull

Subida informaci贸n y archivos desde tu local a remoto

Imagina que has trabajado en tu c贸digo, finalizas un feature y quieres alojar lo cambios en el repositorio remoto.

Tienes que agrear los archivos que han sufrido cambios, imagina que ha cambiado el contenido de "archivo-test.txt":

git add archivo-test.txt
git commit -m "Updated archivo 5"
git push

Ver diferencias realizadas en un commit o tab

Imagina que necesitas ver las diferencias en el c贸digo de un commit concreto con identificador "49f3733f9786b8d0a1d88f19ac429164d21e45ff":

git show 49f3733f9786b8d0a1d88f19ac429164d21e45ff

Imagina que necesitas ver las diferencias en el c贸digo de un tag concreto con identificador "v.10.0.0":

git show v.10.0.0

Si quieres ver diferencias entre dos commits utiliza:

git diff 727bcbd6dfe00f623f708faa6f0ea7d9803c1aa7 0beef0be4883917a7f6704d7f1ac8403108a87ab

Ver historico de trabajo agrupado por nombre de usuario

Imagina que necesitas ver el listado de commits agrupado por usuarios:

git shortlog

Imagina ver un resumen del numero de commit:

git shortlog --summary --numbered

Ver el tag m谩s pr贸ximo a mi actual commit

Imagina que quieres ver a que tag corresponde el actual commit:

git describe

El resultado ser谩 algo como "v.1.0.0-1-g2b31eb2", "v.1.0.0" es el nombre del tag, "1" es el numero de commit tras la creaci贸n del tab "g2b31eb2" es un identificador unico de git.

Obtener qui茅n hizo qu茅 cambio en un archivo concreto

Imagina que necesitas saber que persona realiz贸 un cambio concreto en un archivo de tu proyecto, en este ejemplo en el archivo "README.md":

git blame README.md

Imagina que solo quieres saber que ocurrio entre dos lineas de un archivo concreto, por ejemplo lineas 1 y 10:

git blame -L 1,10 README.md

Buscar un patr贸n de texto entre todos los archivos

Imagina que necesitas encontrar en cuantos archivos existe la palabra "console":

git grep console

Si necesitas ver tambi茅n la l铆nea en la que existe la palabra:

git grep -n console

Si necesitas ver el n煤mero de veces que existe en el proyecto:

git grep -c console

Enlaces de inter茅s

License

MIT

This README.md file has been written keeping in mind

GitHub Markdown
Emoji Cheat Sheet

git-tips's People

Contributors

josejpr avatar

Stargazers

 avatar MAAMOUNE KASSEM MOSTAPHA Hachi avatar Aissaoui Ahmed avatar

Watchers

James Cloos avatar  avatar  avatar

Forkers

daniel-ccopa7

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    馃枛 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 馃搳馃搱馃帀

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google 鉂わ笍 Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.