Un tutorial completo sobre cómo usar GitHub

¿Has comenzado a usar Git recientemente? O tal vez lo has estado usando por un tiempo, pero sus muchos misterios aún son confusos.

Git es principalmente un sistema de control de versiones y un elemento básico en cualquier proyecto de desarrollo de software. Por lo general, tiene dos propósitos principales: copia de seguridad de código y versiones de código. Puede trabajar en su código paso a paso, guardando el progreso de cada paso en el camino en caso de que necesite revertirlo a una copia de seguridad.

El problema común es que Git puede ser difícil de usar. ¡Hay momentos en que las versiones y las ramas no están sincronizadas y usted pasa mucho tiempo tratando de empujar su código! ¡peor aún, no saber cómo funcionan exactamente ciertos comandos podría conducir fácilmente a borrar o sobrescribir bits de código accidentalmente!

¡Es por eso que he preparado este tutorial, para enseñarte cómo usar correctamente git para que todos podamos comenzar a codificar!

Instalar y configurar

Instalando

Lo primero es lo primero, ¡tenemos que instalar git para usarlo! Podemos hacerlo rápido y fácil usando apt:

sudo apt install git-all

Configuración básica

Si lo desea, puede continuar y guardar su nombre de usuario y correo electrónico de git para que no tenga que ingresarlos nuevamente para futuros comandos de git.

git config --global user.name "Nombre de usuario"
git config --global user.email "email"

Colores

Un buen truco que algunas personas a menudo pierden es que puedes habilitar un poco de coloración adicional para que puedas leer la salida de los comandos más fácilmente.

git config --global color.ui true

Control de versiones básico

Inicializando git

Ahora podemos comenzar a versionar nuestro proyecto. Continúe y navegue hasta el directorio para el que desea configurar el control de versiones en el terminal utilizando el comando estándar "cd". Ahora puede inicializar un repositorio git como este:

git init

Esto crea un nuevo subdirectorio llamado .git que contiene todos los archivos de repositorio necesarios: un esqueleto de repositorio de Git. En este punto, todavía no se realiza un seguimiento de nada en su proyecto.

Agregar y comprometerse

Para comenzar a controlar la versión de los archivos existentes, debe comenzar por rastrear esos archivos y realizar una confirmación inicial. Para lograr eso, comienza agregando los archivos a git que te gustaría adjuntar a tu proyecto git.

git add 
git commit -m 'primer compromiso'

Copia de seguridad remota

¡Excelente! Ahora ha comenzado a versionar su proyecto GitHub localmente. Si desea guardar y hacer una copia de seguridad de su proyecto de forma remota, deberá crear un repositorio remoto en GitHub (¡es gratis!). Así que primero dirígete a github.com y crea un repositorio. Luego, use el enlace del repositorio para agregarlo como el origen de su proyecto git local, es decir, dónde se almacenará ese código.

### Ejemplo general
git remoto agregar origen \
https://github.com/user/repo.git
### Un ejemplo con un repositorio mío
git remoto agregar origen \
https://github.com/GeorgeSeif/Semantic-Segmentation-Suite.git

Entonces puedes seguir adelante y enviar tu código a GitHub ... ¡viola! ¡Has hecho una copia de seguridad de tu código!

maestro de origen de empuje git

Trabajando con tus archivos

Comprobación de estado

La herramienta principal que utiliza para determinar qué archivos se encuentran en qué estado es el comando git status. Le permite ver cuáles de sus archivos ya se han confirmado y cuáles no. Si ejecuta este comando cuando todos los archivos ya se han confirmado y enviado, debería ver algo como esto:

$ git status
# En el maestro de sucursal
nada que comprometer (directorio de trabajo limpio)

Si agrega un nuevo archivo a su proyecto, y el archivo no existía antes, cuando ejecuta un estado $ git debería ver su archivo sin seguimiento de esta manera:

$ git status
# En el maestro de sucursal
# Archivos sin seguimiento:
# (use "git add  ..." para incluir en lo que se confirmará)
# #
# README
no se agrega nada para confirmar pero los archivos no rastreados están presentes (use "git add" para rastrear)

Esto hace que el estado de $ git sea realmente útil para una verificación rápida de lo que ya ha respaldado y lo que solo tiene localmente.

Agregar archivos avanzados

Hay algunas formas más avanzadas de agregar archivos a Git que harán que su flujo de trabajo sea más eficiente. En lugar de intentar buscar todos los archivos que tienen cambios y agregarlos uno por uno, podemos hacer lo siguiente:

### Agregar archivos uno por uno
git agregar nombre de archivo

### Agregar todos los archivos en el directorio actual
git add -A

### Agregar todos los cambios de archivos en el directorio actual
git add.

### Elegir qué cambios agregar (esto pasará por todos sus ### cambios y puede 'Y' o 'N' los cambios)
git add -p

Compromisos avanzados

Anteriormente, vimos que podíamos enviar un archivo a Git usando $ git commit -m "commit message". Eso está muy bien para los mensajes de confirmación cortos, pero si desea hacer algo más elaborado, necesitará un poco más:

### Confirmar archivo (s) por etapas
### Esto normalmente se usa para mensajes de confirmación más cortos
git commit -m 'mensaje de confirmación'

### Agregar archivo y confirmar de una vez
git commit filename -m 'mensaje de confirmación'

### Agregar archivo y confirmar archivo por etapas
git commit -am 'insertar mensaje de confirmación'

### Cambiar su mensaje de confirmación más reciente
git commit --amend 'nuevo mensaje de confirmación'

# Combina una secuencia de confirmaciones en una sola
### Puede usar esto para organizar un historial de confirmación desordenado
git rebase -i
### Esto le dará una interfaz en su editor principal:
# Comandos:
# p, pick = use commit
# r, reword = use commit, pero edite el mensaje de commit
# e, edit = use commit, pero deténgase para enmendar
# s, squash = usar commit, pero fusionarse con el commit anterior
# f, fixup = como "squash", pero descarta el mensaje de registro de este commit
# x, exec = ejecutar comando (el resto de la línea) usando shell

Ramificación y fusión

La rama maestra de su repositorio de GitHub siempre debe contener código funcional y estable. Sin embargo, es posible que también desee hacer una copia de seguridad del código en el que está trabajando actualmente, pero que no es completamente estable. Quizás esté agregando una nueva función, esté experimentando y descifrando mucho el código, ¡pero aún así desea mantener una copia de seguridad para guardar su progreso!

La ramificación le permite trabajar en una copia separada de su código sin afectar la rama maestra. Cuando crea una rama por primera vez, se crea un clon completo de su rama maestra con un nuevo nombre. Luego puede modificar el código en esta nueva rama de forma independiente, incluidos los archivos de confirmación y demás. Una vez que la nueva característica se haya integrado por completo y el código sea estable, ¡se fusionará con la rama maestra!

Derivación

Estas son todas las cosas que necesita para crear y trabajar en una sucursal:

### Crear una sucursal local para trabajar
git checkout -b nombre de sucursal

### Cambiar entre 2 ramas
git checkout branch_1
git checkout branch_2
### Empujando su nueva sucursal local a remota como respaldo
git push -u origen branch_2

### Eliminar una sucursal local: esto no le permitirá eliminar una sucursal ### que aún no se ha fusionado
git branch -d branch_2

### Eliminando una sucursal local: esto eliminará una sucursal incluso si ### aún no se ha fusionado.
git branch -D branch_2

### Visualización de todas las ramas actuales para el repositorio, incluidas las ### ramas locales y remotas. Genial para ver si ya tiene una rama ### para una adición de característica particular, especialmente en proyectos ### más grandes
git branch -a

### Ver todas las ramas que se han fusionado en su ### rama actual, incluidas las locales y las remotas. ¡Excelente para ver de dónde viene todo ### su código!
git branch -a --fundido

### Ver todas las ramas que no se han fusionado en su ### rama actual, incluidas las locales y las remotas
git branch -a --no-fusionada

### Ver todas las sucursales locales
rama de git

### Ver todas las ramas remotas
git branch -r

# Rebase rama maestra en rama local
$ git rebase origin / master

# Empujar la sucursal local después de volver a crear el maestro en la sucursal local
$ git push origin + nombre de sucursal

Fusionando

¡Excelente! ¡Ahora ha aprendido cómo crear una rama y trabajar con ese código! Una vez que haya terminado de agregar la nueva función a su sucursal, querrá fusionarla nuevamente en la rama maestra, de modo que su maestro tenga todas las funciones de código más recientes.

Aquí te explicamos cómo hacerlo:

### Primero asegúrate de mirar la rama maestra
git checkout master

### Ahora combina tu rama para dominar
git merge branch_2

¡Eso es! Puede que tenga que arreglar cualquier conflicto de código entre su rama y el maestro, pero Git le mostrará cómo hacer todo eso después de escribir ese comando de fusión.

Corregir errores y retroceder

Los errores suceden ... y ocurren con frecuencia con la codificación! Lo importante es que podemos solucionarlos.

No tengas miedo aquí! Git tiene todo lo que necesita en caso de que cometa un error con el código que inserta, sobrescribe algo o simplemente desea corregir algo que presionó.

### Cambie a la versión del código de la confirmación más reciente
git reset HEAD
git reset HEAD - nombre de archivo # para un archivo específico
### Cambie a la versión del código antes de la confirmación más reciente
git reset HEAD ^ - nombre de archivo
git reset HEAD ^ - nombre de archivo # para un archivo específico
### Cambiar 3 o 5 confirmaciones
git reset HEAD ~ 3 - nombre de archivo
git reset HEAD ~ 3 - nombre de archivo # para un archivo específico
git reset HEAD ~ 5 - nombre de archivo
git reset HEAD ~ 5 - nombre de archivo # para un archivo específico
### Cambiar de nuevo a una confirmación específica
### Donde '0766c053' es la ID de confirmación
git reset 0766c053 - nombre de archivo
git reset 0766c053 - nombre de archivo # para un archivo específico
### Los comandos anteriores eran lo que se conoce como restablecimientos "suaves". Su código ### se restablece, pero git seguirá manteniendo una copia del otro código ### a mano en caso de que lo necesite. Por otro lado, el indicador --hard ### le dice a Git que sobrescriba todos los cambios en el directorio de trabajo.
git reset --hard 0766c053

Consejos y trucos útiles para Git

¡Ya hemos terminado con lo esencial! ¡Aquí hay algunos consejos y trucos más de Git que pueden resultarle útiles para mejorar su flujo de trabajo!

buscando

### Busca partes de cadenas en un directorio
git grep 'algo'

### Busca partes de cadenas en un directorio y -n imprime ### los números de línea donde git ha encontrado coincidencias
git grep -n 'algo'

### Busca partes de la cadena con algún contexto (algunas líneas
### antes y algo después del 'algo' que estamos buscando)
git grep -C  'algo'

### Busca partes de la cadena y también muestra líneas ANTES de
git grep -B  'algo'

### Busca partes de la cadena y también muestra líneas DESPUÉS
git grep -A  'algo'

Ver quién escribió qué

### Mostrar historial de alteración de un archivo con el nombre del autor
culpa git 'nombre de archivo'

### Muestra el historial de alteración de un archivo con el nombre del autor ### y el ID de git commit
culpa git 'nombre de archivo' -l

Inicio sesión

### Muestra una lista de todas las confirmaciones en un repositorio. Este comando muestra ### todo acerca de una confirmación, como ID de confirmación, autor, fecha y mensaje de confirmación ###.
registro de git

### Lista de confirmaciones que muestra solo mensajes de confirmación y cambios
git log -p

### Lista de confirmaciones con la cadena particular que está buscando
git log -S 'algo'

### Lista de confirmaciones por autor
git log --autor 'Nombre del autor'

### Muestra un resumen de la lista de confirmaciones en un repositorio. Este ### muestra una versión más corta de la ID de confirmación y el mensaje de confirmación.
git log --en línea

### Mostrar una lista de confirmaciones en un repositorio desde ayer
git log --since = ayer

### Muestra el registro por autor y busca un término específico dentro del mensaje de confirmación ###
git log --grep "término" --autor "nombre"

Lectura recomendada

¿Intenta entrar en un trabajo de programación o busca actualizar su trabajo actual? Cracking the Coding Interview tiene los mejores ejemplos de preguntas comunes sobre entrevistas de codificación y sus soluciones para empresas como Google, Microsoft y Amazon.

Y solo un aviso, apoyo este blog con enlaces de afiliados de Amazon a excelentes libros, ¡porque compartir buenos libros ayuda a todos! Como Asociado de Amazon, gano de compras que califican.