Empezando con Git. Parte II

5 minutos de lectura

Entendiendo el flujo de trabajo de Git

En el articulo anterior vimos como clonar el repositorio que tenemos en el servidor de github a nuestro ordenador.

Debemos de tener claro que existe un repositorio maestro (_master_) almacenado en el servidor de github y una copia exacta del mismo en nuestro ordenador (_origin_).

inmediatamente después de clonar el repositorio, ambas estructuras son idénticas. Si ejecutamos:

1git status
2On branch master
3Your branch is up-to-date with 'origin/master'.
4nothing to commit, working tree clean.

Nos aparece un mensaje informando que nuestra rama esta actualizada.

Si creamos un fichero nuevo

1echo "Hola" > prueba.txt

y volvemos a ejecutar git status.

1git status
2On branch master
3Your branch is up-to-date with 'origin/master'.
4Untracked files:
5  (use "git add <file>..." to include in what will be committed)
6
7    prueba.txt
8
9nothing added to commit but untracked files present (use "git add" to track)

Git nos informa que hay ficheros sin agregar al proyecto (untracked), junto a un listado de los ficheros, en este caso solo hay uno llamado prueba.txt

Para agregar el fichero al proyecto:

1git add prueba.txt

Si volvemos a ejecutar git status:

1git status
2On branch master
3Your branch is up-to-date with 'origin/master'.
4Changes to be committed:
5  (use "git reset HEAD <file>..." to unstage)
6
7    new file:   prueba.txt

A partir de ahora Git sabe que debe hacer un seguimiento de cualquier cambio que hagamos sobre este fichero.

Hemos agregado el fichero prueba.txt al proyecto pero solo está en el repositorio origin todavía no lo hemos subido al master.

Para que Git grabe los cambios que hemos hecho en ese fichero y guarde una copia de eta versión.

1git commit prueba.txt -m "primer fichero de prueba"
2[master 7e4d0d0] primer fichero de prueba
3 1 file changed, 0 insertions(+), 0 deletions(-)
4 create mode 100644 prueba.txt

Si no ponemos -m si nos abre el editor predeterminado para que pongamos la etiqueta del commit.

Si preguntamos por el estado con git status:

1git status
2On branch master
3Your branch is ahead of 'origin/master' by 1 commit.
4  (use "git push" to publish your local commits)
5nothing to commit, working tree clean

Vemos que nuestra rama local (_origin_) va adelantado respecto al master en 1 commit. Recuerda que aún no hemos subido el fichero al servidor, solo hemos guardado un nueva versión en nuestro repositorio local (_origin_).

Para ver el histórico de cambios git log:

1git log
2commit 7e4d0d0312cfc3e47e38ea4685fcc818b642a96d
3Author: Carlos M <correo@direccion.com>
4Date:   Mon May 8 20:30:51 2017 +0200
5
6    primer fichero de prueba

Vamos a modificar el contenido del fichero prueba.txt en el repositorio local

1echo "me han modificado" >> fichero.txt

Ahora el contenido de fichero.txt es:

1cat prueba.txt
2
3Hola
4Me han modificado

Si lanzamos un git status

 1git status
 2
 3On branch master
 4Your branch is ahead of 'origin/master' by 1 commit.
 5  (use "git push" to publish your local commits)
 6Changes not staged for commit:
 7  (use "git add <file>..." to update what will be committed)
 8  (use "git checkout -- <file>..." to discard changes in working directory)
 9
10    modified:   prueba.txt
11
12no changes added to commit (use "git add" and/or "git commit -a")

Vemos que el fichero prueba.tct ha sido modificado pero no le hemos dicho a Git que queremos guardar estos cambios, que como hemos visto antes se hace con git add.

Comparar ficheros

Antes de añadir los cambios podemos ver las diferencias entre la versión actual y la del último commit con la orden git diff

1git-diff
2diff --git a/prueba.txt b/prueba.txt
3index a19abfe..3ec006e 100644
4--- a/prueba.txt
5+++ b/prueba.txt
6@@ -1 +1 @@
7-Hola
8+Me han modificado

Si está todo correcto

1git add prueba.txt
2git commit prueba.txt -m ·Añadiendo texto"

Comparar repositorios

Al igual que con los archivos podemos ver las diferencias entre dos repositorios con la orden:

1git diff origin/master

Recuperar versiones anteriores

Podemos recuperar la versión inmediatamente anterior de un fichero con el comando git checkout HEAD nombre el fichero.

Si queremos volver dos versiones atrás lo hacemos con HEAD-2, tres versiones seria HEAD-3, etc.

1cat prueba.txt
2Hola
3Me han modificado
4
5git checkout HEAD prueba.txt
6
7cat prueba.txt
8Hola

Subir los cambios locales al servidor

Esta es la parte mas fácil, bastará con un ejecutar la orden:

1git push origin master

Bajar cambios desde el servidor al repositorio local

Si hemos hecho cambios en el repositorio master, para bajarlos al repositorio local (_origin_)

1git pull origin master

Si hemos hecho cambios en el servidor master e intentamos subir archivos desde origin nos dará error, primero debemos bajarlos al repositorio local (_origin_).

Ignorar ficheros

Hay varios métodos, pero para mi, el más sencillo es ir añadiendolos al fichero .gitignore.

Veamos un ejemplo, he creado un fichero nuevo llamado ToDo.md

1git status
2On branch master
3Your branch is up-to-date with 'origin/master'.
4Untracked files:
5  (use "git add <file>..." to include in what will be committed)
6
7    ToDo.md
8
9nothing added to commit but untracked files present (use "git add" to track)

Ahora añado el fichero ToDo.md a .gitignore

 1_site
 2.DS_Store
 3.jekyll
 4.jekyll-metadata
 5.bundle
 6.sass-cache
 7Gemfile
 8Gemfile.lock
 9node_modules
10package.json
11ToDo.md

Y vuelvo a preguntar si hay cambios

 1git status
 2On branch master
 3Your branch is up-to-date with 'origin/master'.
 4Changes not staged for commit:
 5  (use "git add <file>..." to update what will be committed)
 6  (use "git checkout -- <file>..." to discard changes in working directory)
 7
 8    modified:   .gitignore
 9
10no changes added to commit (use "git add" and/or "git commit -a")

Vemos que unicamente nos avisa de que ha sido modificado el fichero .gitignore, ignora al fichero ToDo.md

Resumiendo

  • git status Se muestra la situación del repositorio.
  • git add se agregan archivos al proyecto.
  • git commit se crea una versión nueva en el repositorio local.
  • Siempre hay que escribir un mensaje al hacer un commit (-m “mensaje”).
  • git diff se muestran las diferencias entre versiones de archivos o repositorios.
  • git checkout volvemos a una versión anterior de un archivo.
  • .gitignore lista de archivos a ser ignorados por Git.