wiki:BreveTutorialdeGIT

Breve Tutorial de GIT

Operaciones básicas

Configurar el entorno de usuario

Hay que guardar el usuario y el email que vamos a usar:

  • git config --global --add user.name "Mi nombre"
  • git config --global --add user.email "email@uco.es"

Descargar un proyecto

Con git se descarga del repositorio central el proyecto completo y no solo una rama como con svn

  • git clone URI
  • Ejemplos:
    • git clone git@webapps.uco.es:ts-uco.git

Actualizar nuestra copia

Para traer los cambios que se hayan realizado en el repositorio central

  • git pull

Añadir un archivo

Esta operación marca un archivo para que forme parte del proyecto, pero hasta que no se confirmen los cambios (commit) no lo hace realmente.

  • git add [filepattern] ...

Añade directorios de forma recursiva, comodines (*.c), etc...

Renombrar un archivo

Esta operación cambia el nombre de un archivo o directorio que ya formaba parte del proyecto

  • git mv old_name new_name

Borrar un archivo

Esta operación borra el archivo y lo marca también como borrado para el próximo commit

  • git rm [archivos-o-directorios] ...

Deshacer

Lo que hace esta operación es dejar el directorio o el archivo en el mismo estado en el que estaría en la versión del repositorio en la que estamos trabajando. Útil si hemos editado un archivo y queremos dejarlo como estaba, recuperar un archivo borrado o desmarcar un archivo marcado para añadir. Sólo se puede usar antes de hacer commit. Si no se especifica ningún archivo es sobre todo el repo.

  • git reset --hard [archivos-o-directorios] ...

Commit

Aquí viene la primera diferencia fundamental con svn: commit confirma los cambios en nuestra copia de trabajo, pero eso no significa que los vaya a enviar al repositorio central. Solo que el cambio está confirmado de modo local y se ha hecho una transacción.

  • git commit -a -m "Comentario"

El parámetro -a sirve para añadir todos los archivos añadidos, cambiados o borrados. Si solo se quiere confirmar unos pocos y no todos, se quita el -a y se especifican los archivos o directorios a confirmar

Subir los cambios al repo central

Se pueden subir uno o más commit locales, así que no es necesario hacerlo tras cada commit. Localmente podemos ir confirmando lo que creamos necesario y cuando el sistema esté listo, se sube.

  • git push

Operaciones avanzadas

Cambiar la versión de nuestro repo

Con la orden git log podemos ver todos las revisiones que se han hecho en nuestro repo, indicando el id del commit, el autor, la fecha y la descripción.

  • git log

Si queremos volver a un estado anterior, tenemos que usar la orden checkout:

  • git checkout id [el id es el numero largo que viene después de commit en el log, no hace falta ponerlo entero, se pueden poner los últimos seis o siete números]

También admite otras sintaxis:

  • git checkout master [vuelve al último estado de nuestra rama principal]
  • git checkout master~3 [vuelve al commit que está alejado 3 revisiones de la rama principal, o lo que es lo mismo, deshace los 3 últimos cambios]

Trabajar con ramas

Para ver las ramas que tenemos usamos la orden branch

  • git branch -r

El parámetro -r nos muestra las ramas que están creadas en el servidor central, tiene el formato remote/nombre. Eso no significa que podamos trabajar con ellas directamente, debemos crearnos una rama que se llame igual y que sea copia de aquella. Veamos primero como se crear una rama.

  • git checkout -b nueva-rama

Podríamos usar git branch para crear la rama, pero checkout nos ahorra un paso. El parámetro -b crea la rama, y checkout nos cambia a esa rama como entorno de trabajo. ¡Ya no estamos en master! Todos los commit se harán en esa nueva rama. Así que checkout nos permite cambiar entre revisiones y entre ramas. Para copiar una rama remota hacemos lo siguiente:

  • git checkout -b nombre-rama remote/nombre-rama

Y ya podemos trabajar con ella y hacer push. Si hacemos push en una rama que no existe en el repo central, la crearemos y los demás la verán como una nueva rama remota.

Unir ramas

Ya hemos terminado de hacer la operación en nuestra rama (por ejemplo newfix), el sistema es estable y queremos unirlo con la rama master. Hacemos lo siguiente.

bash$ git checkout master
bash$ git pull  (para asegurarnos de hacer el merge sobre los últimos cambios)
bash$ git merge newfix
bash$ git branch -d newfix

Recordemos que mientras no hagamos push en ninguna de las ramas no se subirán los cambios al repo principal.

Deshacer un cambio

Para deshacer un commit, se usa la orden revert:

  • git revert id-commit

Deshace los cambios del commit indicado, independientemente del estado de la historia en el que nos encontremos. Pueden surgir conflictos dependiendo de los cambios. Revert supone un nuevo commit de manera automática. Ejemplo, imaginemos que hemos eliminado en la revisión 4f32ab un archivo que queremos recuperar. Podemos hacerlo de estas dos maneras:

  • git checkout 4f32ab fichero
  • git revert 4f32ab -m "Comentario"

La diferencia entre uno y otro es que checkout solo trae el fichero, pero no lo añade (hay que hacer add). Revert anula el commit (si hubo más cambios también los deshace) y hace un commit (por lo que no hay que añadirlo).

Crear un tag

Creamos una etiqueta que marca el estado concreto del repositorio en una revisión determinada.

  • git tag nombre-tag rama-o-commit

Para ir cuando queramos a ese tag en concreto usamos checkout. Tag, al contrario que branch, siempre se suben y bajan del repo central (no existe el concepto de tag remoto).

Last modified 13 years ago Last modified on Oct 5, 2011, 1:00:01 PM