En este punto tu ya tienes que saber hacer algunas cosas “básicas” que te permitirán ver el historial de commits, hacer commits y regresar del Repository al Working directory y viceversa. En este tutorial te explicare un poco de las cosas avanzadas como:
Entonces, lo único que necesitas es haber inicializado un repositorio en Git y estar en tu carpeta, una vez allí necesitas tener un archivo .txt o .php o lo que tu gustes para que podamos hacer el ejercicio. En mi caso yo tengo un archivo .php que se llama hola
y tiene el siguiente contenido:
// The build-in name is "Mundo"
$nombre = isset($argv[1]) ? $argv[1] : "Mundo";
@print "Hola {$nombre} \n";
Si no sabes de php no te preocupes (yo tampoco), esto solo es para que no te pierdas en los ejemplos y ejercicios que vamos a hacer en esta clase, ya que la clase o el tutorial es de Git, no de php.
Deshaciendo cambios antes de la fase de staging
Vamos a ir a la rama master y vamos a modificar el comentario que esta en el archivo hola.php, tu puedes modificar cualquier cosa de tu archivo, eso no importa.
$ git checkout master
Previous HEAD position was 3283e0d... Se añade un parámetro por defecto
Switched to branch 'master'
$ # Modificamos hola.php
$ cat hola.php
"Mundo";
@print"Hola, {$nombre}\n";
$ git status
# On branch master# Changes not staged for commit:# (use "git add ..." to update what will be committed)# (use "git checkout -- ..." to discard changes in working direct
ory)
## modified: hola.php#
no changes added to commit (use "git add"and/or"git commit -a")
El mismo Git nos indica que debemos hacer para añadir los cambios o para deshacerlos.
$ git checkout hola.php
$ git status
# On branch master
nothing to commit, working directory clean
$ cat hola.php
// El nombre por defecto es Mundo
$nombre = isset($argv[1]) ? $argv[1] : "Mundo";
@print"Hola, {$nombre}\n";
Deshaciendo cambios antes del commit
Vamos a hacerlo mismo quela vez anterior, pero esta vez sí añadiremos el cambio al stag (sin hacer commit).
$ # Modificamos hola.php
$ cat hola.php
// Este comentario está mal y hay que borrarlo
$nombre = isset($argv[1]) ? $argv[1] : "Mundo";
@print"Hola, {$nombre}\n";
$ git add hola.php
$ git status
# On branch master# Changes to be committed:# (use "git reset HEAD ..." to unstage)## modified: hola.php#
De nuevo, Git nos indica que debemos hacer para deshacer el cambio almacenado en el stag
$ git resetHEAD hola.php
Unstaged changes afterreset:
M hola.php
$ git status
# On branch master# Changes not staged forcommit:# (use"git add ..."toupdate what will be committed)# (use"git checkout -- ..."to discard changes in working direct
ory)
## modified: hola.php#
no changes added tocommit (use"git add"and/or"git commit -a")
$ git checkout hola.php
Y ya tenemos nuestro repositorio limpio otra vez. Checa el estado del repositorio con el comando git status
Deshaciendo commits no deseados
Si a pesar de todo hemos hecho un commit y nos hemos equivocado, podemos deshacerlo con la orden git revert. Modificamos otra vez el archivo como antes pero ahora sí hacemos commit:
$ # Modificamos hola.php
$ cat hola.php
// Este comentario está mal y hay que borrarlo$nombre = isset($argv[1]) ? $argv[1] : "Mundo";
@print"Hola, {$nombre}\n";
$ git add hola.php
$ git commit -m"Ups... este commit está mal."
master 5a5d067] Ups... este commit está mal
1 file changed, 1 insertion(+), 1 deletion(-)
Crear un reverting commit
$ git revert HEAD --no-edit
[master 817407b] Revert "Ups... este commit está mal"
1 file changed, 1 insertion(+), 1 deletion(-)
$ git log --pretty=tformat:'%h %ad | %s%d [%an]' --graph --date=short
* 817407b 2013-06-16 | Revert "Ups... este commit está mal" (HEAD, maste
r) [Sergio Gómez]
* 5a5d067 2013-06-16 | Ups... este commit está mal [Sergio Gómez]* fd4da94 2013-06-16 | Se añade un comentario al cambio del valor por def
ecto (tag: v1) [Sergio Gómez]
* 3283e0d 2013-06-16 | Se añade un parámetro por defecto (tag: v1-beta)
[Sergio Gómez]
* efc252e 2013-06-16 | Parametrización del programa [Sergio Gómez]* e19f2c1 2013-06-16 | Creación del proyecto [Sergio Gómez]
Borrar commits de una rama
En el apartado anterior se revierte el commit pero se queda en el historial, para evitar eso usamos el comando reset
, el cual funciona de la siguiente manera
$ git reset--hard v1
HEADisnowat fd4da94 Se añade un comentario al cambio del valor por def
ecto
$ git log--pretty=tformat:'%h %ad | %s%d [%an]' --graph --date=short
* fd4da94 2013-06-16 | Se añade un comentario al cambio del valor por def
ecto (HEAD, tag: v1, master) [Sergio Góme
* 3283e0d 2013-06-16 | Se añade un parámetro por defecto (tag: v1-beta)
[Sergio Gómez]
* efc252e 2013-06-16 | Parametrización del programa [Sergio Gómez]* e19f2c1 2013-06-16 | Creación del proyecto [Sergio Gómez]
Modificar un commit
Esto se usa cuando hemos olvidado añadir un cambio a un commit que acabamos de realizar
$ cat hola.php
1]) ? $argv[1] : "Mundo";
@print"Hola, {$nombre}\n";
$ git commit -a -m"Añadido el autor del programa"
[master cf405c1] Añadido el autor del programa
1 file changed, 1 insertion(+)
El parámetro -a hace un git add antes de hacer commit de todos los archivos modificados o borrados (de los nuevos no), con lo que nos ahorramos un paso. Ahora nos percatamos que se nos ha olvidado poner el correo electrónico.
$ cat hola.php
// Autor: Sergio Gómez // El nombre por defecto es Mundo$nombre = isset($argv[1]) ? $argv[1] : "Mundo";
@print"Hola, {$nombre}\n";
$ git add hola.php
$ git commit --amend -m"Añadido el autor del programa y su email"
[master 96a39df] Añadido el autor del programa y su email
1 file changed, 1 insertion(+)
$ git log --pretty=tformat:'%h %ad | %s%d [%an]' --graph --date=short
* 96a39df 2013-06-16 | Añadido el autor del programa y su email (HEAD, ma
ster) [Sergio Gómez]
* fd4da94 2013-06-16 | Se añade un comentario al cambio del valor por def
ecto (tag: v1) [Sergio Gómez]
* 3283e0d 2013-06-16 | Se añade un parámetro por defecto (tag: v1-beta)
[Sergio Gómez]
* efc252e 2013-06-16 | Parametrización del programa [Sergio Gómez]* e19f2c1 2013-06-16 | Creación del proyecto [Sergio Gómez]
Moviendo y borrando archivos
Para mover archivos usaremos la orden git mv:
$ mkdir lib
$ git mv hola.php lib
$ git status
# On branch master# Changes to be committed:# (use "git reset HEAD ..." to unstage)## renamed: hola.php -> lib/hola.php#
Mover y borrar archivos
Otra forma de hacer lo mismo:
$ mkdir lib
$ mv hola.php lib
$ git add lib/hola.php
$ git rm hola.php
Y ya podemos guardar los cambios
$ git commit -m "Movido hola.php a lib."
[master 8c2a509] Movido hola.php a lib.1 file changed, 0 insertions(+), 0 deletions(-)
rename hola.php => lib/hola.php (100%)
Source: https://aulasoftwarelibre.github.io/taller-de-git/
Original author: https://github.com/sgomez