Martín Gaitán / @tin_nqn_ / #8JSL / CC-by-sa
From: Juan <juancho@todavianosegit.com> To: Pedro <pete@todavianosegit.com> Subject: Trabajo Peter, acá te mando el zip con la última versión que incluye mi parte del trabajo ----
From: Pedro <pete@todavianosegit.com> To: Juan <juancho@todavianosegit.com> Subject: Re: Trabajo Juancito, me olvidé de avisarte que yo ya había hecho esa parte y cambié la API!
Todo un avance, pero...
Muy bien diez felicitado en...
Windows
http://code.google.com/p/msysgit
Linux
apt-get install git
OS X
brew install git
Quién sos
git config --global user.name "Martín Gaitán"
git config --global user.email gaitan@gmail.com
Tu editor
git config --global core.editor vim
Crear un repo local
git init
Luego se pueden declarar repos remotos
git remote add origin https://github.com/mgaitan/intro-git.git
O directamente clonar un repositorio
git clone https://github.com/mgaitan/intro-git.git .
Cambios específicos
git add README.txt
git commit -m 'Contenido básico en el README'
O todos los cambios en archivos trackeados
git commit -am "El reactor nuclear funciona.
> Faltan tests del disparador"
La brújula
git status
El libro de viaje
git log
GUIs
gitk / gitg / tig / qgit
Corregir el último commit
git commit --amend
Quitar del stage
git reset HEAD file.py # o bien
git rm --cached file.py
Restaurar archivo
git checkout file.java # por defecto ``HEAD`` git checkout [REV] -- file.java # SHA1, tag, rama
Revertir commit
git revert 1776f5
Unstage (quitar del proximo commit)
git rm --cached file.py
Dejar de trackear:
git rm file.py
Cambios locales
git diff
Cambios en stage
git diff --cached
Respecto a una revision
git diff 1776f5
Visualmente
meld . # winmerge, kdiff3, otros...
No queremos control de todo
*.pyc *.swp /build/ /doc/[abc]*.txt .pypirc *.egg-info
$ git remote -v origin git://github.com/mgaitan/intro-git.git (fetch) origin git://github.com/mgaitan/intro-git.git (push)
Sin default
git push <remote> <rbranch>
O definimos default remoto para la rama actual
git push -u <remote> <rbranch>
Y luego
git push
git pull [<remote> <rbranch>]
pull == fetch + merge
Ponerle "nombre" a una revisión.
git tag v0.1.0
Los tags son locales, pero se pueden pushear
git push --tags
De rama en rama se ve aquel amor que juraba que no me habría de olvidar
Factores externos necesitan inevitablemente de cambios de contexto.
En cualquier caso, debes soltar abruptamente lo que estás haciendo y enfocarte en una tarea completamente diferente.
git branch experimento_loco git checkout experimento_loco
o directamente:
git checkout -b experimento_loco
Cambiar de rama
git checkout NOMBRE_RAMA
checkout requiere todo limpio. stash es nuestra alfombra para esconder por un rato
git stash git checkout NOMBRE_RAMA ... git checkout NOMBRE_RAMA_ORIGINAL git stash pop
Desde otra rama. Ej: master
git merge [--no-ff] experimento_loco
Corregimos a mano
[corregimos los conflictos en el editor] git add file.rb git commit -m 'mezclando la rama X. corregi a mano el merge ...'
O forzamos lo nuestro / lo de ellos
git checkout --ours file.rb # o --theirs
git add file.rb
git commit
# en feature-xyz
git rebase master
Código mata curriculum
Bibliografía
http://dbrgn.ch/slides/20130207_getting_git/ http://www.slideshare.net/CarlosTaborda/why-git-sucks-and-youll-use-it-anyways http://www.slideshare.net/leo.soto/introduccin-a-git https://speakerdeck.com/schacon/introduction-to-git http://www.slideshare.net/mickaeltr/git-github-leverage-your-open-source-projects http://www.slideshare.net/anildigital/git-introduction
Space | Forward |
---|---|
Left, Down, Page Down | Next slide |
Right, Up, Page Up | Previous slide |
P | Open presenter console |
H | Toggle this help |