Lista de comandos Git, esta la primera parte de una colección de comandos útiles para el día a día.
- Crear un nuevo repositorio
echo "# README" >> README.md
git init
git add README.md
git commit -m "commit inicial"
git remote add origin [email protected]:usuario/repo.git
git push -u origin master
- Agregar código al nuevo repositorio por primera vez
git remote add origin [email protected]:usuario/repo.git
git push -u origin master
- Hacer pull con rebase
git pull --rebase origin master
- Iniciar repositorio git
git init
- Configurar usuario y correo de git
git config --global user.name "John Doe"
git config --global user.email [email protected]
Nota: El parámetro --global
escribe la configuración para todos los repositorios.
- Mostrar archivos con cambios entre commits
git diff --name-only HEAD HEAD~3
Nota: También puede hacer con el nombre de la ramas o el hash de los commits.
- Ver la rama actual
git branch
- Obtener todas las ramas locales
git branch -a
- Listar las ramas remotas
git branch -r
- Crear nueva rama
git branch nombre_branch
- Mostrar configuración de git
git config --list
- git ignore
¿Qué pasa si tenemos archivos que no queremos que git rastree, como archivos de copia de seguridad creados por nuestro editor o archivos intermedios creados durante el análisis de datos? Vamos a crear algunos archivos ficticios:
$ mkdir results
$ touch a.dat b.dat c.dat results/a.out results/b.out
Mira lo que git dice:
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
a.dat
b.dat
c.dat
results/
nothing added to commit but untracked files present (use "git add" to track)
Colocar estos archivos bajo el control de versiones sería un desperdicio de espacio en disco. Y lo que es peor, al tenerlos todos listados, podría distraernos de los cambios que realmente importan, así que vamos a decirle a git que los ignore.
Lo hacemos creando un archivo en el directorio raíz de nuestro proyecto llamado .gitignore
:
$ nano .gitignore
$ cat .gitignore
*.dat
results/
Estos patrones le dicen a git que ignore cualquier archivo cuyo nombre termine en .dat
y todo lo que haya en el directorio results
. (Si alguno de estos archivos ya estaba siendo rastreado, git seguirá rastreándolos.)
Una vez que hemos creado este archivo, la salida de git status
es mucho más limpia:
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
nothing added to commit but untracked files present (use "git add" to track)
Lo único que git advierte ahora, es el archivo .gitignore
recién creado. Podrías pensar que no queremos rastrearlo, pero todos aquellos con los que compartimos nuestro repositorio probablemente desearán ignorar las mismas cosas que nosotros. Vamos a agregar y hacer “commit” de .gitignore
:
$ git add .gitignore
$ git commit -m "Add the ignore file"
$ git status
# On branch master
nothing to commit, working directory clean
Como ventaja, usar .gitignore
nos ayuda a evitar agregar accidentalmente al repositorio los archivos que no queremos rastrear:
$ git add a.dat
The following paths are ignored by one of your .gitignore files:
a.dat
Use -f if you really want to add them.
Si realmente queremos anular la configuración de ignorar, podemos usar git add -f
para obligar a git a añadir algo. Por ejemplo, git add -f a.dat
. También podemos ver siempre el estado de los archivos ignorados si queremos:
$ git status --ignored
On branch master
Ignored files:
(use "git add -f <file>..." to include in what will be committed)
a.dat
b.dat
c.dat
results/
nothing to commit, working directory clean
- Eliminar rama local.
$ git branch -d nombre_rama
- Forzar el borrado de la rama.
En caso de que la rama tenga trabajos sin fusionar puede forzarse el borrado de la rama.
$ git branch -D nombre-rama
- Eliminar la rama remota
$ git push origin :nombre-rama
- Reemplazar archivo por otro de otra rama
$ git checkout devel -- merge.txt
- Listar ramas remotas desde la mas antigua a mas reciente
for branch in `git branch -r | grep -v HEAD`;do echo -e `git show --format="%ci %cr" $branch | head -n 1` \\t$branch; done | sort
- Lista ramas remotas desde la mas reciente a la mas antigua
for branch in `git branch -r | grep -v HEAD`;do echo -e `git show --format="%ci %cr" $branch | head -n 1` \\t$branch; done | sort -r
- Ver cuantos commit lleva adelante o por detras la rama con respecto a master
git rev-list --left-right --count master...test-branch
- Listar archivos de un commit
git log -m -1 --name-only commitId
- Limpiar cache de GIT
git gc --prune=now
- Nombres largos
git config core.longpaths true
- Ver solo el ultimo commit
git log --name-status HEAD^..HEAD|grep commit
- Eliminar rama local
git branch -d nombre_rama
En el caso de que esa rama contenga trabajos sin fusionar, el comando anterior nos devolverá el siguiente error:
error: The branch 'nombre-rama' is not an ancestor of your current HEAD.
If you are sure you want to delete it, run 'git branch -D nombre-rama'.
Si aún así queremos eliminar esa rama, se puede forzar el borrado de la siguiente manera:
$ git branch -D nombre-rama
- Eliminar rama remota
$ git push origin :nombre-rama
Enlace de interés
Sitio Oficial de Git
Libro Oficial de Git
Documentación