- 1. Sistemas de Control de Versiones
- 2. Introducción a GIT
- 3. Instalando GIT
- 4. Configurando GIT
- 5. Uso básico
- 6. Ramas
- Vamos a realizar cambios y confirmar instantáneas
[snapshots]
de esos cambios en el repositorio cada vez que se alcance un estado que queramos conservar.
Cada archivo del repositorio puede tener 2 estados:
- tracked: archivos que estaban en la última instantánea del proyecto. Pueden ser archivos sin modificar, modificados, o preparados (
staged
). - untracked: archivos en el
working directory
que no estaban en la última instantánea y no están en elstaging area
.
Ciclo de vida del estado de tus archivos:
- Cuando clonas un repositorio todos los archivos estarán
tracked
y sin modificar. - Mientras editas, Git los ve como modificados (han sido cambiados desde su último commit).
- Luego preparas estos archivos modificados (
git add
) y finalmente confirmas (git commit
) todos los cambios preparados (staged
).
Cambios desde el último commit a la fecha:
$ git status
Cambios de forma compacta:
$ git status --short $ git status -s
$ git status -sb $ git status -s -b #branch?
Muestra:
-
Rama actual.
-
Archivos en el STAGE.
-
Archivos que no estan en el STAGE.
-
Cambios pendientes: ficheros que han recibido modificaciones desde el último commit.
-
Si ejecutaramos este comando inmediatamente después de clonar un repositorio:
$ git status On branch master ## rama en que estamos. 'master' es la rama por defecto nothing to commit, working directory clean ## no hay archivos rastreados y modificados
- Supongamos que añadimos un nuevo archivo. Al ejecutar
git status
veríamos el archivo sin rastrear:
$ git status On branch master Untracked files: ...
Sin rastrear
significa que Git ve archivos que no teníamos en elcommit
anterior.- Git no los incluirá en el próximo
commit
a menos que se le indique explicítamente (git add
). - Si desearas incluirlo, debes comenzar a rastrearlo (
git add
).
Al ver el estado del proyecto con
git status
, vemos que los archivos estan siendo rastreados y estan preparados para ser confirmadoschanges to be commited
.
M README M M Rakefile A lib/git.rb M lib/simplegit.rb ? ? license.txt
El estado aparece en 2 columnas.
izq: preparado. der: sin preparar.
Los estados pueden ser:
??: no rastreados. A: preparados. M: modificados.
Ejemplo:
README
esta modificado en elworking directory
pero no está preparado.lib/simplegit.rb
esta modificado y preparado.Rakefile
esta modificado, preparado y modificado otra vez, por lo que hay cambios preparados y sin preparar.
Prepara cambios para enviarlos al repositorio (los envía al STAGE
). También comienza a rastrearlos si es que no lo estan siendo.
- Preparar un archivo específico:
$ git add README.md
- Preparar múltiples archivos:
$ git add index.html index.js + Preparar archivos de un directorio:+ Preparar todos los archivos:
$git add .
git add -A git add -u git add * git add -all
Archivos nuevos | Archivos modificados | Archivos eliminados | |
---|---|---|---|
git add -A | - | - | - |
https://stackoverflow.com/questions/26042390/git-add-asterisk-vs-git-add-period
git add . # git add -all // git add -A // Agrega todos los archivos
git add *.png # Agrega todos los archivos .png del directorio actual
git add "*.png" # Agrega todos los archivos .png de todo el proyecto
git add index.html config.ts # Agrega un listado de archivos
git add pdfs/*.pdf # Agrega todos los archivos .pdf de la carpeta pdfs
git add pdfs/ # Agrega todos los archivos de la carpeta pdfs
git commit -m "agregando imagenes png"
git add css/
git commit -m "agrengando CSS"
# agregar todos y luego excluir uno
git add -A # igual a git add .??
git reset *.xml # excluye todos los archivos xml
Cuando se antepone --
es porque a continuación viene una palabra.
--
Ejemplo:
// Cuando se pone un solo -
significa que cada letra a continuación es un comando independiente.
-...
Historial de commits de la rama actual:
$ git log
Cada commit en una línea:
$ git log --oneline
Commits de todas las ramas:
$ git log --all
Historia en forma de grafo:
$ git log --graph
??:
$ git log --decorate
Lo común es utilizar lo anterior junto:
$ git log --oneline --decorate --all --graph
Muestra todos los commits creados, el lugar en el que estamos HEAD
y la rama actual master
.
git log -- git log --follow
hash HEAD: último commit en la rama actual rama actual Autor fecha
# comando visto en instagram:
# Usado cuando intento psuhear algo y me doi cuenta que ha habido cambios en el flujo principal
alias repush="git pull --rebase && git push"
alias repush="git push -f"
Sacar archivos del STAGE
:
git reset HEAD
HEAD^
: Apunta al penúltimo commit.
Deje en el penultimo commit sin eliminar los cambios. Deja los cambios fuera del STAGE.
git reset --soft HEAD^
git reset --soft <id_commit>^
--mixed
: comando por defecto si no añadieramos un flag.
Nos movemos a un punto en el tiempo.
Archivos son quitados del stage pero aun contienen las modificaciones.
git reset --mixed <id_commit>
Nos movemos a un punto de la historia destruyendo todos los archivos que no corresponden a ese punto.
git reset --hard <id_commit>
- Permite regresar a un punto a pesar de haber hecho un git reset.
- Git siempre mantiene un registro de todo lo que sucede en el repositorio.
Muestra el historial de lo que hemos hecho localmente desde clonamos el repositorio. Muestra clone, commits, Esto es más preciso que hacer git log, porque esta traerá todos los commits, no solo los locales, si no también los de compañeros
git reflog
Aquí buscamos el id del punto al que queramos volver. Luego
git reset --hard <id_commit>
$ git remote add origin https://github.com/floxcristian/learn_git
Ver dónde apunta el repositorio local:
$ git remote show origin
Despliega un login para ingresar a nuestra cuenta de Github y subir el código.
git push -u origin <b>master</b>
Detalla cada línea de un archivo respecto a quién lo modifico y en que commit.
Sería lo contrario a git add.
Excluir un archivo de la lista de agregados.
git bash reset index.js