Empezando con Git. Parte II
2017-05-05
Índice
- Entendiendo el flujo de trabajo de Git
- Comparar ficheros
- Comparar repositorios
- Recuperar versiones anteriores
- Subir los cambios locales al servidor
- Ignorar ficheros
- Resumiendo
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 <[email protected]>
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
Espero que te haya gustado, pasa un buen día. 🐧
Resumiendo
Espero que te haya gustado, pasa un buen día. 🐧