General resources
Crear un repositorio nuevo:
# Crear carpeta e ir a ella
mkdir repositorio
cd repositorio
# Crear y subir repositorio
git init
touch README.md
git add . # añade todo, tambien git add * o -A
git commit -m "Nombre del commit"
git push -u origin master
Clonar un repositorio:
git clone /path/repo.git
Información básica:
git statusgit loggit helpTenemos tres zonas locales y una remota:

git add *git add <archivo>git add -iPara hacer commit: git commit -m "Nombre"
Para editar un commit (pero que se guarden los cambios dentro del mismo): git commit --amend -m "Fix"
Configurar repositorio remoto (si no está ya configurado):
git remote add origin <server>
git remote remove origin <server>
Ver repositorios remotos:
git remote -v
Para enviar los cambios: git push origin <rama>
(Generalmente usaremos git push origin master)

Master es la rama estable por defecto.
git branch
git branch -agit checkout <rama>Modificar ramas:
git checkout -b rama1 # crear
git branch -d rama1 # eliminar rama local
git push origin --delete rama-remota # eliminar rama remota
Recuerda que al crear una rama se crea a partir del commit donde estamos ahora.
Enviar una rama al repositorio remoto: git push origin <rama>
Se crea un nuevo commit con la fusión de las dos ramas. Para ello:
git checkout mastergit merge rama-secundariaHay dos tipos de fusión:
Podemos hacerlo de dos formas:
git pull (hace a la vez remote > HEAD > integra en WD). » Típico: git pull origin mastergit fetch + git merge.
git fetch sirve para traer archivos del repositorio remoto al local HEAD (pero no al WD). » Tipico: git fetch origingit merge <rama>mezcla el contenido del repo local con el del WD. Típico: git merge origin/mastergit pull solo funciona si no hay confictos (‘auto-merge’). Sino, habrá que hacer manual-merge (ver punto anterior).

Git te crea un archivo intermedio con los cambios de los dos para que tu lo edites. Además podemos ver las diferencias entre archivos:
git diff <source-branch> <target-branch>
TIPS: Para actualizar todos los subdirectorios git de una carpeta comun, podemos ejecutar en bash:
for d in ./*/ ; do (cd "$d" && git pull origin master); done.
Un fork es un clon de un repositorio. Cuando hacemos un fork (lo haremos en github):

Por tanto a la hora de hacer git fetch tenemos que tener en cuenta si hacer:
git fetch origin para actualizar los cambios que has hecho tú o tu organización (en tu propio código actualizado).git fetch upstream para actualizar los cambios del repositorio origen (ejemplo: el codigo fuente del programa).Si no tenemos acceso a la organización, podemos hacer un pull-request (dentro del repositorio forkeado, y aparece automáticamente en el proyecto base).
Sirve sobre todo para añadir nombres de versión a los commits (ej: v1.2).
Añadir versión al ultimo commit:
git tag 1.0.0
Añadir versión a un commit concreto:
git log # para ver la id del commit
git tag 1.0.0 <idcommit>
Eliminar una etiqueta: git tag -d v2
Annotated vs lightweight:
git tag -a v1.4 # lightweight
git tag -a v1.4 -m "my version 1.4" # annotated
Segun buenas prácticas:
Solo se pueden subir a github tags ANOTADAS. Se suben explicitamente con git push origin <tag>.
Tambien se pueden subir todas con git push --follow-tags. Ver aqui la discusión.
Para poner este comportamiento por defecto: git config --global push.followTags true.
NOTA: antes se subían todas con git push --tagspero se desaconseja hacerlo.
Comandos avanzados del log:
git log --author=santigit log --pretty=onelinegit log --graph --oneline --decorate --allgit log --name-statusPodemos verlo de forma bonita con git diff --color-words.
Lo más util es para ver cambios en ultimo commit: git diff.
Otros usos:
git diff file.extgit diff v1-v2git diff <source-branch> <target-branch>
git diff master branch2 ./text.txtExplicación corta:
git revert, que crea un nuevo commit basado en invertir el último (no elimina commits anteriores).git reset, que restaura a un commit anterior y elimina todo rastro de los intermedios, y NO PERMITE HACER PUSH posteriormente (solo con -f).

Explicación larga:
git checkout -- <nombre>git checkout .git reset --hard HEAD. Resets the HEAD to the commit you select, undoes the changes in the index and undoes the changes in your WDgit reset --hard <commit-sha>git reset --soft elimina el commit pero sin tocar el codigo ni los archivos (si solo queremos borrar el commit del log). Only resets the HEAD to the commit you selectgit fetch origin congit reset --hard origin/mastergit revert HEAD (mejor)Por todo lo anterior, git reset se considera INSEGURO y se recomienda no usarlo por el riesgo de pérdida de información.
git cleanes otra forma de limpiar. No se usarla y no se si me hace falta.
Podemos ‘revisar’ estados antiguos con git checkout; por ejemplo podemos ver un commit antiguo (poniendo el sha del commit) o un tag antiguo (poniendo la versión). Al hacer esto, entramos en un estado de ‘detach head state’, en que HEAD no apunta a master sino a ese punto temporal que le hemos marcado.
Así podemos ver los archivos que había en ese momento, recuperarlos, etc. Cuando hayamos terminado, nada se guardará, y volvemos a nuestro estado ‘normal’ con git checkout master.
NOTA: NO guardar commits ni nada en ese estado ya que se eliminará.
git --versiongit config --global user.name "Tu nombre", tambien user.emailgit config core.ignorecase falsegit config --global color.ui true
Git usa vicomo editor principal (se puede cambiar a vim o nano)
:q salir:wq salir y guardarEn .gitignore añadimos archivos que no quedamos sincronizar:
.DS_store.ipynb_checkpoints/ carpetasecho .DS_store >> .gitignoreSi queremos eliminar un archivo remoto al que ya hemos hecho push antes de añadirlo a .gitignore: git rm -r --cached <carpeta>
Para ver patrones de exclusión, aquí.
Son scripts que se pueden ejecutar cuando hacemos algo. Ej.: cuando hacemos un commit, podemos programarlo para hacerlo algo.
Para ello, entrar en .git/hooks y crear un archivo (ej: touch post-commit), y ese archivo que sea un script.

gitkgit stash deja aparcados temporalmente cambios para que no afecten al commit (no creo que lo use. Más info aqui.git blame sirve para ver especificamente que ha hecho cada autor y así dilucidar problemas y errores en el código.Sirve para alojar web directamente en github.
Lo primero es crear un repo que será <nombreusuario>.github.io. Ese será el principal.
Cada repo podrá ser una carpeta a la que se accederá con *.github.io/repo.
Para ello hay tres formas de habilitarlo en Settings:
/docs del repo como webTambien podemos cambiar el tema directamente con la web de Github.
Para crear páginas de github-pages está integrado jekyll que es un creador de páginas estáticas a partir de elementos dinámicos (MD o html, con estilos css etc). No soporta php.
Orden de preferencia de archivos: index.html > index.md > README.md
Archivos que hay que crear: about.md
Recuerda el ‘header block’ en el inicio de los archivos (md, html…)
---
Header block (al inicio)
---
gem install jekyll bundle
jekyll new <blogname>
cd <blogname>
jekyll serve
Tambien podemos ejecutarlo para que se vean los cambios en tiempo real:
bundle exec jekyll serve --livereload
Cosas que podemos cambiar en _config.yml:
Si es para usarlo con github-pages, hemos de cambiar en Gemfile la parte que pone gem jekyll por gem github-pages.
Si algo no funciona: bundle update
https://classroom.github.com/
Sirve para hacer clase y enseñanza
Sirve para hacer paquetes que se instalan con npm
Sirve para crear proyectos y hacer listas de tareas dentro del repositorio.