Empezando con Git.Parte II

Esto pretende ser una pequeña guía sobre el sistema de control de versiones Git, entender su flujo de trabajo y los comandos básicos para manipular nuestro blog.

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:

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

Nos aparece un mensaje informando que nuestra rama esta actualizada.

Si creamos un fichero nuevo

echo "Hola" > prueba.txt

y volvemos a ejecutar git status.

git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
  (use "git add <file>..." to include in what will be committed)

	prueba.txt

nothing 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:

git add prueba.txt

Si volvemos a ejecutar git status:

git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	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.

git commit prueba.txt -m "primer fichero de prueba"
[master 7e4d0d0] primer fichero de prueba
 1 file changed, 0 insertions(+), 0 deletions(-)
 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:

git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)
nothing 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:

git log
commit 7e4d0d0312cfc3e47e38ea4685fcc818b642a96d
Author: Carlos M <correo@direccion.com>
Date:   Mon May 8 20:30:51 2017 +0200

    primer fichero de prueba

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

echo "me han modificado" >> fichero.txt

Ahora el contenido de fichero.txt es:

cat prueba.txt

Hola
Me han modificado

Si lanzamos un git status

git status

On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   prueba.txt

no 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

git-diff
diff --git a/prueba.txt b/prueba.txt
index a19abfe..3ec006e 100644
--- a/prueba.txt
+++ b/prueba.txt
@@ -1 +1 @@
-Hola
+Me han modificado

Si está todo correcto

git add prueba.txt
git 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:

git 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.

cat prueba.txt
Hola
Me han modificado

git checkout HEAD prueba.txt

cat prueba.txt
Hola

Subir los cambios locales al servidor

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

git 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)

git 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

git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
  (use "git add <file>..." to include in what will be committed)

	ToDo.md

nothing added to commit but untracked files present (use "git add" to track)

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

_site
.DS_Store
.jekyll
.jekyll-metadata
.bundle
.sass-cache
Gemfile
Gemfile.lock
node_modules
package.json
ToDo.md

Y vuelvo a preguntar si hay cambios

git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   .gitignore

no 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.
comentario powered by Disqus