Consejos comandos para git básico
De todos es conocido que Git es el sistema de control de versiones más conocido y usado en el mundo. Aquí os dejo un pequeño cheatsheet de los comandos que personalmente más suelo usar. ¡Espero que os sirvan!
Preparando entorno
Podemos utilizar 2 comandos para iniciar nuestro entorno:
Init - crea un nuevo repositorio con la rama master por defecto.
$ git init
Initialized empty Git repository in C:/myrepository/.git/
Clone - partiendo de un repositorio ya existente, clona y sincroniza un repositorio remoto en tu entorno local. Por defecto, te situará en la rama master. En el ejemplo, clonaremos el repositorio vacío “mydummyrepo” de github a nuestro local
$ git clone https://github.com/dielop101/mydummyrepo.git
Cloning into 'mydummyrepo'...
warning: You appear to have cloned an empty repository.
Iniciando desarrollo
Una vez ya tenemos el repositorio creado, necesitaremos saber el estado actual, ramas existentes y cómo poder crear una rama para empezar nuestro desarrollo.
Status - Devuelve el estado actual del repositorio. Sabremos identificar rama actual, si está actualizada frente al repositorio remoto y si tenemos algo pendiende de subir.
$ git status
On branch master
Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
(use "git pull" to update your local branch)
nothing to commit, working tree clean
Branch -a - Lista las ramas tanto locales como remotas, indicando la rama en la cual te encuentras actualmente mediante un asterisco.
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
Branch [branch name] - Dado que estamos en rama master, crearemos una rama que dependa de master. Vamos a crear dev:
$ git branch dev
Checkout - Permite cambiar de rama, en el caso de que se permita. Si detecta ficheros modificados, no te permitirá el cambio (tendrás que hacer commit o stash para no tener contenido pendiente de subir).
$ git checkout dev
Switched to branch 'dev'
Checkout -b [branch name] - Crea rama y cambia a dicha rama (es decir, hace un branch + checkout)
$ git checkout -b dev
Switched to a new branch 'dev'
Actualizar rama
Parece que alguien ha actualizado master, creando un fichero “test3”. Vamos a sincronizar nuestra rama master para que, si en el futuro volvemos a crear una rama a partir de master, tengamos los últimos cambios.
Stash - En caso de tener cambios pendientes, los apilaremos para poder cambiar de rama. En el siguiente ejemplo, tenemos modificado el fichero “test2” y apilaremos sus cambios. Tras apilar los cambios, podemos entrar de nuevo al fichero y veremos que ya no contiene los cambios.
$ git stash
Saved working directory and index state WIP on dev: 293160a Create test2
Fetch - Sincroniza los cambios que ha sufrido la rama. No realiza ninguna modificación en los ficheros de la rama actual, simplemente deja en “standby” los cambios a la espera de realizar el pull. Podemos ahorrar este comando directamente usando el pull.
$ git fetch
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/dielop101/mydummyrepo
293160a..37662be master -> origin/master
Pull - Actualiza la rama local con los cambios que existan en la rama del repositorio remoto. Cambiaremos de rama a master y bajaremos los cambios existentes.
$ git pull
Updating 293160a..37662be
Fast-forward
test3 | 1 +
1 file changed, 1 insertion(+)
create mode 100644 test3
Stash pop - Desapilamos el contenido anteriormente apilado.
$ git stash pop
On branch dev
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: test2
no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (0414e783e55f3950aecca0d6f3d9ca8a53e2e567)
Subir cambios
Vamos a subir los cambios que hemos realizado en el fichero “test2”.
Add - Identificamos los ficheros que queremos de los cuales queremos hacer commit. Dado que queremos hacer commit de todo lo existente, lo indicaremos mediante el carácter punto
$ git add .
Commit - Preparamos el commit que se añadirá a la rama. Definimos un mensaje explicando el cambio realizado
$ git commit -m "subiendo modificación fichero test2"
[dev c6ce524] subiendo modificación fichero test2
1 file changed, 1 insertion(+), 1 deletion(-)
Push - Sincronizamos los cambios en el respositorio remoto. Esto implica llevar todos los commits que tengamos pendientes en la rama al repositorio remoto. Dado que no existe la rama en el servidor, tendremos que indicarlo en el comando
$ git push origin dev
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 299 bytes | 299.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote:
remote: Create a pull request for 'dev' on GitHub by visiting:
remote: https://github.com/dielop101/mydummyrepo/pull/new/dev
remote:
To https://github.com/dielop101/mydummyrepo.git
* [new branch] dev -> dev
Finalizando desarrollo
Una vez finalizado el desarrollo, procedemos a mergear los cambios de dev en la rama master. Para ello, cambiaremos de rama a master. Recuerda que, una vez mergeado el contenido de dev en master, tendrás que realizar el push al repositorio, dado que el merge se ha realizado en local.
Merge - Combina los cambios de una rama origen a una rama destino. En este caso, mergearemos dev en master.
$ git merge dev
Merge made by the 'recursive' strategy.
test2 | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Conclusiones
Git tiene infinidad de comandos y de parámetros. Con este post, trato de documentar los conceptos y los comandos que considero más importantes, dado que son los que más uso en mi día a día. Cualquier duda o sugerencia, estoy disponible en mis redes sociales :)