Home
Git - Manual de usuario
Contents
1. Una vez que corras eso podes correr git unstage file Cuando corres git reset sin especificar una opci n por defecto es mixed Las otras opciones son soft y hard git reset soft deshacer el ltimo commit no saca del los archivos del staging Lo primero que git reset hace es deshacer el ltimo commit y poner los archivos de nuevo en el ndice Si se incluye la opci n soft HEAD se puede deshacer el commit y los archivos modificados estar n de vuelta en el stage git status s M hello rb git commit am hello with a flower master 5857ac1 hello with a flower 1 files changed 3 insertions 1 deletions git status Un branch master nothing to commit working directory clean git reset soft HEAD git status s M hello rb Esto es b sicamente hacer lo mismo que git commit amend que te permite hacer m s cambios y meterlos en el mismo ltimo commit Nota Nunca hagas un amend de un commit al que ya le hiciste el push porque puede traer problemas git reset hard deshace el ltimo commit saca del stage los cambios y pisa los cambios del directorio de trabajo Esta es la opci n m s peligrosa ya que si lo corres por error perdes los cambios que ven as realizando en tu directorio de trabajo git status Un branch master Changes to be committed use git reset HEAD lt file gt to unstage modified README Changes not staged for commit use git add lt file gt to update
2. puts Hello World from Ruby end end git commit am added from ruby master b7ae93b added from ruby 1 files changed 1 insertions 1 deletions rename hello rb gt ruby rb 65 Ahora esos cambios se guardan en la rama master Observe que el nombre de la clase es de nuevo a Hello World no HiWorld Para incorporar el cambio HiWorld podemos hacer el merge hacia la rama change_ class Sin embargo el nombre del archivo ha cambiado desde que creamos las ramas que har Git git branch change_class master 23 git merge change_class Renaming hello rb gt ruby rb Auto merging ruby rb Merge made by recursive ruby rb 6 1 files changed 2 insertions 4 deletions cat ruby rb class HiWorld def self hello puts Hello World from Ruby end end HiWorld hello Observa que no hay conflictos de merge y el archivo que se hab a renombrado ahora tiene el nombre de clase HiWorld que se hizo en la otra rama Conflictos de merge fusi n En situaciones en las que el mismo bloque de c digo se edita en diferentes ramas no hay manera de que una computadora lo resuelva as que depende de nosotros Vamos a ver otro ejemplo donde se cambia la misma l nea en dos ramas git branch master git checkout b fix_readme Switched to a new branch fix_readme vim README git commit am fixed readme title fix_readme 3ac015d fixed readme title 1 files
3. obtendr n un branch llamado erlang que podr n ver y del cual podr n sin cronizar Podes hacer un push de cualquier branch a cualquier repositorio re moto al que tengas permisos de escritura Si tu branch ya se encuentra en el repositorio remoto git va a tratar de actualizarlo si no se encuentra entonces lo va a crear Por ltimo un problema frecuente se da cuando queres hacer un push de alg n cambio sobre una rama que alguien actualiz antes que vos y vos no tenes esa actualizaci n Si tratas de hacer un push en ese caso Git por default no te va a dejar pisar esas actualizaciones Para resolver este problema tenes que actualizar tu copia haciendo un pull de los cambios o un fetch merge y luego hacer el push Esto es lo que pasar si intentas de hacer un push en una rama que tenes desactualizada con respecto al servidor remoto git push github master To gitCgithub com schacon hw git rejected master gt master non fast forward error failed to push some refs to gitOgithub com schacon hw git To prevent you from losing history non fast forward updates were rejected Merge the remote changes before pushing again See the Note about fast forwards section of git push help for details 33 Entonces podes arreglar esto corriendo git fetch github git merge github master y luego haciendo nuevamente el push Herramienta visual Rabbit VCS Si bien recomendamos particularmente la l nea de comandos para trabajar co
4. accidente Si ya hiciste el commit o s lo si lo agregaste entonces este comando te ayuda a deshacer el commit en caso de que lo hayas hecho y a sacar del ndice a los archivos que le indiques Supongamos que modificaste dos archivos y queres grabarlos en dos commits diferentes entonces tenes que agregar y confirmar uno y despu s agregar y confirmar el otro Si accidentalmente agregas los dos al mismo tiempo C mo sacas uno Lo haces con git reset HEAD nombreArchivo T cnicamente no es necesario a adir el pero se usa para avisarle a Git que terminaste de listar las opciones y empezas a enumerar las rutas de los archivos Veamos un ejemplo en el que tenemos dos archivos que fueron modificados desde el ltimo commit vamos a hacer un commit con ambos y luego sacaremos uno de los dos git status s M README M hello rb git add git status s M README M hello rb git reset HEAD hello rb Unstaged changes after reset M hello rb git status s M README M hello rb Ahora s podes correr git commit para grabar los cambios al archivo README no al archivo hello rb En caso de que te preguntes que est haciendo lo que hace en realidad es resetear las entradas del archivo ese en el index para que sea igual que en el commit anterior Si queres cambiar el nombre del comando porque te resulta m s f cil de entender s lo tenes que grabarle un alias git config global alias unstage reset HEAD 14
5. changed 1 insertions 1 deletions Ahora hemos commiteado un cambio a una l nea en nuestro archivo README en una rama Vamos a cambiar la misma l nea de una manera diferente en nuestra rama master git checkout master Switched to branch master vim README git commit am fixed readme title differently master 3cbb6aa fixed readme title differently 1 files changed 1 insertions 1 deletions Vamos a combinar la primera rama en nuestra rama principal provocando un conflicto de merge 24 git merge fix_readme Auto merging README CONFLICT content Merge conflict in README Automatic merge failed fix conflicts and then commit the result cat README lt lt lt lt lt lt lt HEAD Many Hello World Examples Hello World Lang Examples gt gt gt gt gt gt gt fix_readme This project has examples of hello world in Podemos ver que Git inserta marcas de conflicto est ndares en los archivos cuando hay un conflicto de merge Ahora nos toca a nosotros resolverlos Vamos a hacerlo de forma manual pero mir opciones para git mergetool si queres que Git use una herramienta de merging gr fica como kdiff3 emerja p4merge etc vim README here I m fizing the conflict git diff diff cc README index 9103e27 69cadla 0000000 a README D README 000 1 4 1 4 1 4 000 Many Hello World Examples Hello World Lang Examples Many Hello World Lang Examples This project has
6. es pensar en la sinta xis git push remote name local branch remote branch Esto indica que desea hacer push de tu rama local para que coincida con la de la rama remota Cuando se quita la parte local branch se intenta hacer coincidir nada con la rama remota dici ndole la rama remota que se convierta en nada Como alternativa pod s ejecutar git push remote name delete En pocas palabras se usa git branch para listar sus ramas actuales crear nuevas ramas y eliminar ramas innecesarias o ya fusionadas 21 git merge fusionar una rama en tu contexto actual Una vez que tengas el trabajo aislado en una rama es muy probable que desees incorporarlo en la rama principal Pod s combinar cualquiera de las ramas en su rama actual con el comando git merge Tomemos como ejemplo la rama removals de arriba Si creamos una rama eliminamos archivos en ella y com miteamos los cambios de removals en esa rama se a sla de nuestra rama princi pal master en este caso Para incluir las eliminaciones en la rama master pod s fusionar en ella la rama removals git branch master removals 1s README hello rb more txt test txt git merge removals Updating 8bd6d8b 8f7c949 Fast forward more txt 1 test txt t 2 files changed O insertions 2 deletions delete mode 100644 more txt delete mode 100644 test txt 1s README hello rb Fusiones mas complejas Por supuesto esto no s lo funciona
7. examples of hello world in Un buen consejo para la resoluci n de conflictos de merge en Git es que si ejecutas git diff te mostrar los dos lados del conflicto y c mo se ha resuelto como se muestra aqu Ahora es el momento de marcar el archivo como resuelto En Git lo hacemos con git add para decirle a Git que el archivo se ha resuelto ten s que hacerle un commit git status s UU README git add README git status s M README git commit master 8d585ea Merge branch fix_readme Y ahora ya resolvimos con xito nuestro conflicto de merge y commiteado el resultado En pocas palabras se usa git merge para combinar otra rama en tu 25 rama actual Puede ser que se de cuenta de forma autom tica c mo combinar de la mejor manera los diferentes cambios de ambas ramas y si no puede s lo tendr s que resolver los conflictos manualmente git log mostrar la historia de commits en un branch Hasta ahora hemos estado haciendo commits de cambios de tu proyecto y cam biando entre diferentes ramas aisladas pero Qu pasa si nos hemos olvidado de c mo llegamos a donde estamos Y si queremos saber en qu difiere una rama de otra Git te prove de una herramienta que te muestra todos los mensajes de commit que te llevan al estado actual de la rama este comando se llama git log Para entender el comando git log hay que entender que informaci n se almacena cuando se ejecuta el comando git commit para guardar los cam
8. grabar los cambios en ese contexto y a continuaci n alternar a otra rama branch f cilmente Cuando cambi s de ramas Git reemplaza el directorio de trabajo con las versiones de los archivos del ltimo commit en la rama Se fusionan las ramas con git merge Pod s fusionar mergear f cilmente varias veces la misma rama a lo largo del tiempo o pod s optar por eliminar una rama inmediatamente despu s de su fusi n git branch Listar crear y administrar los contextos de trabajo Sin argumentos git branch listar las ramas locales que tengas La rama sobre la que se est trabajando actualmente tendr una estrella al lado de l y si ten s la coloraci n habilitada se mostrar la rama actual en verde git branch master Esto significa que tenemos una rama master y actualmente estamos en ella Al ejecutar git init autom ticamente crear una rama master de forma predeter minada sin embargo no hay nada de especial en el nombre no hace falta tener una rama master pero ya que es el valor por defecto que se crea la mayor a de los proyectos la tienen git branch nombre del branch crea una nueva rama Vamos a empezar por crear una nueva rama y cambiar a ella Puede hacerlo ejecutando git branch branchName 18 git branch pruebas git branch master pruebas Ahora podemos ver que tenemos una nueva rama Cuando se crea una rama de esta manera se crea a partir del ltimo commit por lo que
9. si haces algunos cambios y los grabas en este punto y luego cambias a la rama pruebas volver s al contexto de trabajo de cuando se cre la rama en primer lugar se puede pensar a la rama como un marcador etiqueta de donde se encuentra actualmente Vamos a ver esto en acci n usamos git checkout rama para cambiar la rama en la que actualmente estamos ls README hello rb echo contenido de la prueba gt test txt echo m s contenido gt more txt git add Txt git commit m added two files master 8bd6d8b added two files 2 files changed 2 insertions O deletions create mode 100 644 more txt create mode 100 644 test txt ls README hello rb more txt test txt git checkout pruebas Switched to branch pruebas ls README hello rb As que ahora podemos ver que cuando nos cambiamos a la rama testing se eliminaron los archivos nuevos Podr amos volver a la rama master y verlos reaparecer ls README hello rb git checkout master Switched to branch master ls README hello rb more txt test txt git branch v ver la ltima confirmaci n en cada rama Si queremos ver los ltimos commits en cada rama podemos ejecutar git branch v para verlos 19 git branch v master 54b417d fix javascript issue development 74c111d modify component json file testing 62a557a update test scripts git branch d branchName eliminar una rama Si queremos eliminar una rama co
10. sin tener en cuenta lo que est en el staging area git diff stat muestra una lista de cambios en lugar de un diff com pleto por archivo Si no queremos la salida completa del diff pero queremos m s que la salida del git status podemos utilizar la opci n stat lo que nos 11 dar un resumen de los cambios en su lugar Ac est el mismo ejemplo anterior pero con la opci n stat git status s MM hello rb git diff stat hello rb 1 1 files changed 1 insertions 0 deletions Tambi n se puede proporcionar una ruta de archivo al final de cualquiera de estas opciones para limitar la salida del diff a un archivo o subdirectorio git commit graba una instant nea del staging area Una vez que agregaste los cambios al staging area vas a necesitar confirmar esos cambios con el comando add pero para poder hacerlo git necesita grabar tus datos personales para poder hacer un seguimiento de los cambios Entonces el primer paso es configurar estos datos git config global user name Tu nombre git config global user email tumailCalgundominio com A continuaci n vamos a meter en el stage los cambios y luego a confirmarlos en este ejemplo se usa la opci n m para agregar el mensaje al mismo tiempo que confirmamos los cambios git add hello rb git status s M hello rb git commit m mis cambios al archivo hola mundo master 6822034 my hola mundo changes 1 files changed 2 insertion
11. what will be committed use git checkout lt file gt to discard changes in working directory modified README git reset hard HEAD NHEKHXHHRHRAE RA A Y e 15 HEAD is now at 5857ac1 hello with a flower git status Un branch master nothing to commit working directory clean En el ejemplo anterior ten amos los cambios para meterlos en el stage y luego hacer el commit pero un git reset hard los pis Adem s de eso el ltimo commit se ha deshecho Se puede reemplazar HEAD con un el n mero de un commit SHA 1 u otra referencia para restablecer el directorio de trabajo a ese punto espec fico git rm remueve archivos del staging area Esto es un poco diferente a git reset HEAD que saca los archivos del stage Sacarlo del stage significa revertir el staging area a la versi n anterior a que em pecemos a modificar archivos en el directorio de trabajo En cambio el comando git rm saca la entrada del archivo en el index de manera que no va a ser tenido m s en cuenta para el pr ximo commit Por defecto git rm filename va a remover el archivo del index y del disco para sacarlo del index pero dejarlo en el directorio de trabajo hay que agregar la opci n cached git stash guardar cambios realizados en el stage y el index para confirmarlos m s tarde Si est s en medio de algunos cambios y de repente aparece un bug urgente que no podes dejar de atender pero no podes hacer un commit con algo que no anda
12. al s lo la actualizaci n de una base de datos local Para poder colaborar con otros desarrolladores en Git tenes que poner todos los datos en un servidor en el que los otros desarrolladores tengan acceso La forma en que Git hace esto es sincronizando los datos con otro repositorio remoto En estos casos no hay ninguna diferencia real entre un servidor y un cliente un repositorio Git es un repositorio Git y se puede sincronizar con otro f cilmente En general vas a hacer una serie de commits a nivel local y luego a buscar a los datos del repositorio compartido en l nea que clonaste combinar cualquier nuevo trabajo que se agregue al tuyo y por ltimo hacer un push de todo esto al repositorio remoto git pull bajar nuevas ramas y datos del repositorio remoto El comando git pull busca en un repositorio remoto y trata de combinar en la rama actual lo que trajo del remoto Git tiene dos comandos para actualizar el repositorio local con un repositorio remoto El primer comando es git fetch y se usa para sincronizar el repositorio local con otro remoto bajando los datos no tenes a nivel local Las ramas que se encuentran en el servidor remoto se llaman ramas remotas y son id nticas a las ramas locales con excepci n de que Git no te permitir que cambies tu entorno hacia ellas sin embargo podes combinarlas con las tuyas locales hacer un merge de esas ramas a las tuyas hacerles un diff con otras ramas etc Pero todos esos comand
13. bios realizados Adem s de mostrar los archivos modificados y los mensajes de com mit tambi n se muestra informaci n sobre la persona que hizo el commit Git tambi n almacena el commit en que se ha basado el estado actual de la rama Es decir si se clona un proyecto Cu l es el commit que modificaste para llegar al commit que subiste pusheaste Esto es til para saber c mo el proyecto lleg a donde est y permite a Git averiguar qui n lo cambi Si Git tiene commit que se guard y en el que se bas entonces se puede calcular de forma autom tica lo que ha cambiado El commit en que se bas un nuevo commit se llama el padre parent Para ver una lista cronol gica de los padres de cualquier rama puede ejecutar git log cuando est s en esa rama Por ejemplo si ejecutamos git log en el proyecto Hello World en que hemos estado trabajando en esta secci n vamos a ver todos los commits que hemos hecho Para ver una versi n m s compacta de la misma historia podemos utilizar la opci n oneline git log oneline 8d585ea Merge branch fix_readme 3cbb6aa fixed readme title differently 3ac015d fixed readme title 558151a Merge branch change_class b7ae93b added from ruby 3467b0a changed the class name 17f4acf first commit Lo que nos muestra es la historia del desarrollo de este proyecto Si los mensajes de los commits son adecuadamente descriptivos sto nos puede informar sobre todos los cambios que se han aplicad
14. ded erlang erlang ab5ab4c added erlang 1 files changed 5 insertions 0 deletions create mode 100644 erlang_hw erl Tambi n agregamos un programa de ejemplo Haskell mientras que todav a en la rama llamada erlang vim haskell hs git add haskell hs git commit m added haskell erlang 1834130 added haskell 1 files changed 4 insertions 0 deletions create mode 100644 haskell hs Finalmente decidimos que queremos cambiar el nombre de clase de nuestro programa de Rubi a como era antes Por lo tanto podemos volver a la rama principal cambiar eso y commitear directamente en la rama principal en lugar de crear otra rama 27 git checkout master Switched to branch master ls README ruby rb vim ruby rb git commit am reverted to old class name master 594f90b reverted to old class name 1 files changed 2 insertions 2 deletions As que ahora supongamos que no trabajamos en el proyecto durante un tiempo porque tenemos otras cosas que hacer Cuando regresemos queremos saber en qu estado est la rama erlang y que hemos dejado fuera de la rama principal Con s lo mirar el nombre de la rama no podemos saber qu cambios hemos hecho en Haskell pero usando git log podemos saberlo f cilmente Si le das un nombre de rama a Git te mostrar s lo los commits que son accesibles en la historia de esa rama que son los commits que influyeron en el estado actual git lo
15. diferentes para el comando git diff El uso que veremos a con tinuaci n lo vamos a usar para describir los cambios que est n en stage o que fueron modificados pero no est n en el stage git diff muestra las diferencias de cambios que no est n en el stage Sin ning n argumento adicional un simple git diff mostrar en formato unifi cado qu c digo o contenido ha cambiado en el proyecto desde el ltimo commit que todav a no se meti en el stage area no se le hizo el add para el pr ximo commit vim hello rb git status s M hello rb git diff diff git a hello rb b hello rb index d62ac43 8d15d50 100644 a hello rb b hello rb 1 7 1 7 class HelloWorld def self hello puts hello world indica que se reemplaz esta l nea por la de abajo por puts hola mundo end end Entonces git diff te muestra cu les son los cambios l nea por l nea Por lo general es un buen comando de seguimiento de git status git diff HEAD muestra las diferencias de todos los cambios est n o no en el staging ste comando nos permite b sicamente ver la diferencia entre nuestro directorio de trabajo y el ltimo commit ignorando el staging area Si hacemos un nuevo cambio en nuestro archivo hello rb entonces tendremos algunos cambios en el directorio de trabajo y otros en el ltimo commit si hacemos un diff HEAD entonces nos mostrar las diferencias entre lo ltimo subido y el directorio
16. emote Compressing objects 100 1322 1322 done remote Total 2783 delta 1526 reused 2587 delta 1387 Receiving objects 100 2783 2783 1 23 MiB 10 KiB s done Resolving deltas 100 1526 1526 completed with 387 local objects From github com schacon hw 8e29b09 c7c5al0 master gt github master 0709fdc d4ccf73 c langs gt github c langs 6684f82 ae06d2b java gt github java new branch ada gt github ada new branch lisp gt github lisp Ac podemos ver que desde la ltima vez que actualizamos nuestro repositorio se agregaron o actualizaron cinco ramas Las ramas ada y lisp son nuevas y las ramas master c langs y java fueron actualizadas En nuestro ejemplo otros desarrolladores est n subiendo cambios a ramas remotas para ser contro ladas antes de ser mergeadas a la rama master Tambi n podes ver los mapeos que hace git la rama master en el repositorio remoto se ve como una rama llamada github master en el local De esta forma podes hacer un merge de la rama master remota en la rama master local corriendo el comando git merge github master O podes ver que commits nuevos hay en esa rama corriendo git log github master master Si tu repositorio remoto se llama origin entonces ser origin master en tal caso Si tenes m s de un repositorio remoto podes hacer un fecth desde uno espec fico corriendo git fetch alias o podes decirle a git que
17. escribir un mensaje para la etiqueta al igual que como se escribe un mensaje de commit Ahora cuando corremos git log decorate podemos ver nuestra etiqueta all git log oneline decorate graph 594f90b HEAD tag v1 0 master reverted to old class name Sd58bea Merge branch fix_readme AN 3ac015d fix_readme fixed readme title 3cbb6aa fixed readme title differently 558151a Merge branch change_class IN x 3467b0a changed the class name 29 b7ae93b added from ruby 17f4ac first commit Si hacemos m s commits la etiqueta estar justo en ese commit as que ten emos un commit espec fico marcado para siempre y siempre se pueden comparar futuros commits al mismo Nosotros no tenemos que etiquetar el commit en el que estamos sin embargo si nos olvidamos de etiquetar un commit que hemos pusheado subido podemos etiquetarlo ejecutando el mismo comando pero con el SHA commit al final Por ejemplo digamos que hab amos lanzado el commit 558151a varios commits atr s pero se nos olvid etiquetarlos en el momento Los podemos marcar ahora git tag a v0 9 558151a git log oneline decorate graph 594f90b HEAD tag v1 0 master reverted to old class name Sd58bea Merge branch fix_readme IN 3ac015d fix_readme fixed readme title 3cbb6aa fixed readme title differently 558151a tag v0 9 Merge branch change_class IN x 3467b0a cha
18. eva rama git branch v ver la ltima confirmaci n en cada rama git branch d branchName eliminar una rama git checkout b nombre del branch crear y cambiar inmediatamente AUS TAM aio e e a sa NN a AeA N N N 0 0 CO O 0 git push nombre remoto nombre de branch eliminar una rama TEMObA yea aa A A AA E a A 21 git merge fusionar una rama en tu contexto actual 22 git log mostrar la historia de commits en un branch 26 git tag marcar un punto en la historia como importante 29 Intercambio y actualizaci n de Proyectos 31 git pull bajar nuevas ramas y datos del repositorio remoto 31 git push subir las nuevas ramas y cambios a un repositorio remoto 32 Herramienta visual Rabbit VCS 34 Referencias 39 Introducci n Entendiendo que es y como fun ciona Git Qu es un sistema de control de versiones Un sistema de control de versiones CVS te permite realizar un seguimiento de la historia de una colecci n de archivos y adem s incluye la funcionalidad de revertir la colecci n de archivos actual hacia una versi n anterior Cada versi n podr a considerarse como una fotograf a del estado de la colecci n en un momento determinado de tiempo La colecci n de archivos usualmente es c digo fuente de alg n lenguaje de programaci n sin embargo un sistema de control de versiones funciona con cualquier tipo de archivo Tanto la colecci n de archi
19. g oneline erlang 1834130 added haskell ab5ab4c added erlang 8d585ea Merge branch fix_readme 3cbb6aa fixed readme title differently 3ac015d fixed readme title 558151a Merge branch change_class b7ae93b added from ruby 3467b0a changed the class name 17f4acf first commit De esta manera es muy f cil ver que c digo tenemos inclu do en la rama Haskell resaltado en la salida Lo que es a n m s genial es que podemos decirle f cilmente a Git que s lo estamos interesados en los commits que son accesibles desde una rama y no desde otra es decir qu commits son exclusivos de una rama en comparaci n con otra yl En este caso si estamos interesados en mergear la rama erlang queremos ver qu commits van a afectar nuestra rama cuando hagamos el correspondiente merge La forma en que le decimos a Git es agregando un delante de la rama que no queremos ver Por ejemplo si queremos ver los commits que se hay en la rama erlang y que no est n en la rama master podemos hacer erlang master o viceversa Tenga en cuenta que en l nea de comandos Windows trata a como un car cter especial en cuyo caso tendr que rodear master entre comillas git log oneline erlang master 1834130 added haskell 28 ab5ab4c added erlang git log oneline master erlang 594f90b reverted to old class name Esto nos da una buena y simple herramienta de gesti n de ramas Nos permite ver f cilmente que com
20. ho lo mismo que al escribir git add README hello rb Para el caso tambi n git add hubiese hecho lo mismo adem s de meterse en subdirectorios que estuviesen dentro del directorio actual Entonces si ahora editamos uno de estos archivos y corremos el comando git status nuevamente ver amos algo como lo siguiente vim README git status s AM README A hello rb El estado AM significa que el archivo fue modificado en el disco desde que lo agregamos Esto significa que si hacemos un commit de nuestro cambios hasta este momento estar amos grabando la versi n del archivo que ten amos en el momento que corrimos git add no la versi n que est en nuestro disco Git no asume que lo que uno quiere subir es expl citamente lo que tenemos en el disco uno le tiene que avisar a Git con el comando git add nuevamente En pocas palabras uno corre git add en un archivo cuando quiere incluir cualquier cambio que le hayas hecho a tu pr ximo commit Cualquier cam bio que no hayas agregado con este comando no ser inclu do en el commit esta particularidad nos ofrece la posibilidad de armar los commits de una forma m s certera con un alto nivel de detalle acerca de qu queremos incluir y qu no git status estado de los archivos en el directorio de trabajo y en el staging area Tal como lo mencionamos en la secci n anterior uno puede usar este comando para ver el estado de su staging area comparado con el c d
21. igo que se encuentra en su directorio de trabajo Usando la opci n s nos mostrar la forma abreviada del informe en cambio si no usamos esa opci n nos mostrar m s informaci n del contexto Aqu hay un ejemplo del resultado con y sin la opci n git status s AM README A hello rb Sin la opci n se ver a algo as git status s git status Un branch master Initial commit Changes to be committed use git rm cached lt file gt to unstage new file README new file hello rb Changed but not updated use git add lt file gt to update what will be committed use git checkout lt file gt to discard changes in working directory modified README Se ve que la salida corta es m s compacta pero la salida larga tiene algunos datos tiles que nos pueden llegar a servir en alg n momento Git adem s te informar de los archivos que fueron borrados agregados o modificados desde tu ltimo commit git status s M README D hello rb En el siguiente ejemplo se pueden ver dos columnas la primera es para el staging area la segunda es para el directorio de trabajo Entonces por ejemplo si ten s el README file en el stage y despu s lo modificas nuevamente sin correr git add nuevamente vas a ver algo as git status s MM README D hello rb 10 git diff muestra diferencias entre el stage y lo modificado que no esta en el stage Hay dos usos
22. itorio Revisi n Representa una versi n del c digo fuente Git implementa las revisiones de la misma manera que los objetos commit e HEAD Es un objeto simb lico que apunta generalmente al branch so bre el que estamos trabajando lo que tambi n conocemos como checked out branch Si uno cambia de un branch al otro el HEAD apunta al ltimo commit del branch seleccionado Si uno hace un checkout de un determinado commit el HEAD apunta a ese commit e Staging area Es el lugar en el que se almacenan los cambios del working tree previos al commit Es decir contiene el set de cambios relevantes para el pr ximo commit e Index Es un t rmino alternativo para referirnos al staging area Comandos b sicos en Git Obteniendo y creando proyectos Como ya lo mencionamos previamente para hacer cualquier cosa con Git primero hay que tener un repositorio creado que es donde Git almacena los cambios que haces al c digo Hay dos maneras de obtener un repositorio Git Una forma es simplemente inicializar uno nuevo desde un carpeta existente como un nuevo proyecto La segunda forma consiste en clonar un repositorio Git p blico como si quisieras una copia o quisieras trabajar con alguien en un proyecto Git init inicializar una carpeta como un repositorio Git Para crear un repositorio en una carpeta existente de archivos podes ejecutar el comando git init en esa carpeta Por ejemplo digamos que tenemos una carpeta con algunos a
23. ligus Git Manual de usuario Version 1 Cooperativa deTrabajo Fiqus LTDA http www fiqus com Contents Introducci n Entendiendo que es y como funciona Git Qu es un sistema de control de versiones Qu es un sistema de control de versiones distribuida QUES GIA e e tl E DAA A A El repositorio local oaie e eoe e o o e o Repositorios remotos e Repaso de algunos conceptos tiles Comandos b sicos en Git Obteniendo y creando proyectos o e Git init inicializar una carpeta como un repositorio Git Git clone copiar un repositorio Git e Agregando y subiendo cambios 0 o o git add agregar los contenidos de archivos al staging area git status estado de los archivos en el directorio de trabajo y en lst ging area iii De e a A a A git diff muestra diferencias entre el stage y lo modificado que no esta en el Stage o git commit graba una instant nea del staging area git reset deshace cambios y commits o git rm remueve archivos del staging area git stash guardar cambios realizados en el stage y el index para confirmarlos m s tarde o o Creando y administrando ramas git branch Listar crear y administrar los contextos de trabajo git branch nombre del branch crea una nu
24. lujo de trabajo m s al estilo de Subversion s lo ten s que editar los archivos y luego ejecutar git commit a cuando queres que todo lo que ha cambiado entre en el commit Igualmente siempre tenes que ejecutar git add para iniciar el seguimiento de nuevos archivos vim hello rb git status s M hello rb git commit m cambios en el archivo hola Un branch master Changed but not updated use git add lt file gt to update what will be committed use git checkout lt file gt to discard changes in working directory modified hello rb no changes added to commit use git add and or git commit a git commit am changes to hello file master 78b2670 changes to hello file 1 files changed 2 insertions 1 deletions Este comando te permite cerrar el workflow de trabajo con git haces cambios a tu archivos despu s usas git add para meter esos cambios en el staging area 13 con git status y git diff consultas las diferencias y los cambios y finalmente con git commit guardas una instant nea con el estado del conjunto de archivos en ese momento determinado git reset deshace cambios y commits Este es probablemente el comando m s confuso pero puede ser muy til cuando cometas alg n error git reset HEAD deshacer el ltimo commit y sacar del staging area los archivos modificados En general se usa para sacar algo que agregaste al staging area le hiciste el add por
25. mits son nicos y a que ramas pertenecen as sabemos lo que nos falta y lo que bamos a mergear si tuvi ramos que hacer el merge correspondiente En pocas palabras se usa git log para hacer una lista de la historia de commits o una lista de personas que han hecho cambios que han llevado al estado actual de la rama Esto permite ver c mo el proyecto lleg al estado en que se encuentra actualmente git tag marcar un punto en la historia como importante Si se llega a un punto que es importante y que se quiere recordar por siempre ese commit en espec fico pod s etiquetarlo con git tag El comando tag b si camente consiste en poner un marcador permanente en un commit en concreto para que pueda ser usado para comparar con otro commit en el futuro Esto se hace a menudo cuando se libera una release versi n o se hace una entrega Digamos que queremos lanzar nuestro proyecto Hello World como la versi n 1 0 Podemos marcar el ltimo commit HEAD como v1 0 ejecutando git tag a v1 0 La opci n a significa hacer una etiqueta anotada lo que te permite agregar un mensaje a la etiqueta que es lo que casi siempre se quiere hacer La ejecuci n sin a tambi n funciona pero no graba cuando fue etique tado quien lo ha marcado o no te permite agregar un mensaje a la etiqueta Se recomienda crear siempre las etiquetas anotadas git tag a v1 0 Cuando se ejecuta el comando git tag a Git abrir el editor y se puede
26. mo la rama pruebas en el ejemplo anterior ya que no hay un trabajo nico en ella podemos ejecutar git branch d branch para eliminarlo git branch master testing git branch d testing Deleted branch testing was 78b2670 git branch master git checkout b nombre del branch crear y cambiar in mediatamente a una rama En la mayor a de los casos vas a querer cambiar de rama de inmediato por lo que pod s hacer el trabajo en ella y luego la fusi n en una rama que contiene so lamente un trabajo estable como el master en un momento posterior cuando el trabajo en su nueva rama es estable Pod s hacer esto con bastante facilidad con git branch newbranch git checkout newbranch pero Git te da un acceso directo para esto git checkout b newbranch git branch master ls README hello rb more txt test txt git checkout b removals Switched to a new branch removals git rm more txt rm more txt git rm test txt rm test txt ls README hello rb git commit am removed useless files removals 8f7c949 removed useless files 20 2 files changed 0 insertions 2 deletions delete mode 100644 more txt delete mode 100644 test txt git checkout master Switched to branch master 1s README hello rb more txt test txt Ac pod s ver como creamos una rama eliminado algunos de los archivos mien tras que est bamos en el contexto de esa rama y luego cambiamo
27. n git tambi n existen herramientas visuales que nos permiten trabajar de una forma m s amigable Una herramienta muy conocida y usada es RabbitVCS a continuaci n mostramos paso a paso como ser a uno de los flujos explicados anteriormente con una herramienta visual como esta e Clonamos un repositorio Especificamos la URL el usuario y la contrase a para que Git verifique los permisos Crear una carpeta Crear un documento Restaurar los archivos que faltan RabbitVCS SVN RabbitVCs Git Clone Ubuntu One Initialize Repository Organizar los elementos Eliminar Comprobar Ampliar Exportar Reducir Tama o normal Preferencias Propiedades Acerca de e Realizamos un cambio en un archivo Podemos ver que la herramienta nos marca los archivos modificados con un icono color rojo e Hacemos un commit del cambio realizado elegimos la opci n confirmar en caso de que tengamos lenguaje espa ol e Confirmamos el commit Le agregamos un mensaje que describa lo que estuvimos haciendo y confirmamos 34 Repository URL https usuario contrase aGrepositoriolgit MM Destination home nicolas dev Git usuario contrase aOrepositorid 0 Cancelar Aceptar Clone Finalizado Clone Completed Clone Acci n Ruta pan _Tipo MIME Cloning into home nicolas dev Git gd2013 Finalizado Guardar como Cancelar Aceptar _ e 0 README Ext test txt 35 README txt test E Ab
28. nged the class name b7ae93b added from ruby 17f4ac first commit Las etiquetas apuntando a los objetos trackeados desde las cabezas de las ramas se descargar n autom ticamente al hacer un fetch de un repositorio remoto Sin embargo las etiquetas que no son accesibles desde las cabezas de las ramas se omitir n Si desea asegurarse de que todas las etiquetas se incluyen siempre debe incluir la opci n tags git fetch origin tags remote Counting objects 1832 done remote Compressing objects 100 726 726 done remote Total 1519 delta 1000 reused 1202 delta 764 Receiving objects 100 1519 1519 1 30 MiB 1 21 MiB s done Resolving deltas 100 1000 1000 completed with 182 local objects From git github com example user example repo new tag v1 0 gt v1 0 new tag v1 1 gt v1 1 30 Si lo que desea es una sola etiqueta usar git fetch tag Por defecto las etiquetas no est n incluidas cuando haces un push a un repositorio remoto Con el fin de actualizar expl citamente esto se debe incluir la opci n tags usando git push En pocas palabras se utiliza git tag para marcar un commit o marcar tu reporitorio como importante Esto tambi n te permite referirte a ese commit con una referencia m s f cil de recordar que un SHA Intercambio y actualizaci n de Proyectos Git no tiene un servidor central como Subversion Todos los comandos hasta el momento se han realizado a nivel loc
29. o o han influido en el estado actual de la rama y por lo tanto lo que hay en ella Tambi n podemos utilizarlo para ver cuando la historia se bifurca y se fusion merge con la opci n graph Aqu es el mismo comando pero con el gr fico de topolog a encendido git log oneline graph Sd58bea Merge branch fix_readme 26 AN 3ac015d fixed readme title 3cbb6aa fixed readme title differently 558151a Merge branch change_class AN x 3467b0a changed the class name b7ae93b added from ruby 17f4ac first commit Ahora podemos ver m s claramente cuando las ramas se separaron y luego cuando se fusionaron de nuevo Esto es muy bueno para ver lo que ha sucedido o qu cambios se aplicaron tambi n es muy til para la gesti n de las ramas Vamos a crear una nueva rama hacer alg n trabajo en ella y luego volver a nuestra rama principal para hacer algo de trabajo finalmente vamos a ver c mo el comando log puede ayudarnos a entender lo que est sucediendo en cada uno En primer lugar vamos a crear una nueva rama para a adir el lenguaje de programaci Erlang al ejemplo Hello World queremos hacer esto en una rama para no ensuciar nuestra rama estable con c digo que puede no funcionar por un tiempo para que podamos cambiar limpiamente hacia y desde ella git checkout b erlang Switched to a new branch erlang vim erlang_hw erl git add erlang_hw erl git commit m ad
30. obre cada uno de ellos a lo largo del tiempo En cambio Git modela sus datos m s como un conjunto de instant neas de un mini sistema de archivos Cada vez que confirmas un cambio o guardas el estado de tu proyecto en Git l b sicamente hace una foto del estado de todos tus archivos en ese momento y guarda una referencia a esa instant nea Para ser eficiente si los archivos no se han modificado Git no almacena el archivo de nuevo s lo un enlace al archivo anterior id ntico que ya tiene almacenado Server Computer Version Database Version Database Version Database En la imagen se ve claramente como en un sistema de control de versiones distribuida cada repositorio clonado es una copia exacta del repositorio padre El repositorio local Luego de clonar o crear un repositorio el usuario tiene una copia completa del repositorio y puede realizar operaciones de control de versiones contra este repositorio local como por ejemplo crear nuevas versiones revertir cambios etc El flujo de trabajo b sico en Git es algo as e Modificas una serie de archivos en tu directorio de trabajo working direc tory e A ad s instant neas de los archivos a tu rea de preparaci n staging area e Confirmas los cambios lo que toma los archivos tal y como est n en el rea de preparaci n y almacena esa instant nea de manera permanente en tu directorio de Git git directory Local Operations Hay dos tipos de
31. one remote Total 100 delta 35 reused O delta 0 Receiving objects 100 100 100 9 51 KiB done Resolving deltas 100 35 35 done cd simplegit 1s README Rakefile lib Esto copiar toda la historia de este proyecto con lo cual lo tendr s a nivel local y te dar una carpeta de trabajo de la rama principal de ese proyecto para que puedas ver el c digo o empezar a editarlo Si cambias a la nueva carpeta podes ver la subcarpeta git ah es donde est n todos los datos del proyecto ls a i git README Rakefile lib cd git 1s HEAD description info packed refs branches hooks logs refs config index objects Por defecto Git va a crear una carpeta que tiene el mismo nombre que el proyecto en la direcci n que le indiques b sicamente cualquier cosa que aparezca despu s de la ltima barra de la URL Si queres un nombre diferente podes ponerlo al final del comando despu s de la URL Entonces se utiliza el comando git clone para obtener una copia local de un repositorio Git para que puedas verlo y empezar a modificarlo Agregando y subiendo cambios Un concepto que no se debe perder de vista es que Git tiene un ndice index que funciona como una especie de rea de desarrollo staging area para los cambios que uno va generando en los archivos a medida que va trabajando Esto permite terminar de darle forma a los cambios que uno va realizando en su rea de trabajo en lugar de que la herramienta au
32. orking tree Posee el contenido de un commit que se puede obtener haciendo un checkout desde un repositorio git Luego uno puede modificar ese contenido y hacer un nuevo commit con los cambios al repositorio e Branch rama Un branch es un puntero con un nombre determinado por el usuario que apunta a un commit Posicionarse en un branch utilizando git es denominado como hacer un checkout de ese branch Si est s trabajando en un determinado branch la creaci n de un nuevo commit hace avanzar el puntero a esta nueva instancia Cada commit conoce sus antecesores as como a sus sucesores en caso de tenerlos Uno de los branches es el default generalmente llamado master e Tag Un tag apunta a un commit que un vocamente identifica una versi n del repositorio Con un tag pod s tener un puntero con nombre al que siempre puedas revertir los cambios Por ejemplo la versi n de 25 01 2009 del branch testing e Commit Vos commiteas los cambios a un repositorio Esto crea un nuevo objeto commit en el repositorio que un vocamente identifica una nueva versi n del contenido del repositorio Esta revisi n puede ser consultada posteriormente por ejemplo si uno quiere ver el c digo fuente de una versi n anterior Cada commit posee metadata que nos informa acerca del autor la fecha y otros datos que nos pueden resultar pr cticos a la hora de tratar de encontrar uno determinado e URL Una URL en Git determina la ubicaci n de un repos
33. os los corres locales despu s de sincronizar el repositorio en el que est s trabajando El segundo comando que busca los nuevos datos de un servidor remoto es git pull Este comando b sicamente ejecuta un git fetch inmediatamente seguido de un git merge de la rama que esta en ese repositorio remoto y que est siendo seguida por la rama en la que te encontras parado en tu repositorio local Al gunos autores insisten en correr los comandos fetch y merge por separado sin embargo la mayor a de la gente que utiliza git hace directamente un git pull cada vez que quiere actualizar su repositorio local con el repositorio remoto 31 Asumiendo que tenes un repositorio remoto configurado y queres bajarte actual izaciones tendr as que correr el comando git fetch alias para avisarle a Git que baje toda las actualizaciones y luego deber s correr git merge alias branch para hacer un merge sincronicar los cambios en la rama en la que te encon tras parado cualquier actualizaci n que veas en el servidor Entonces si por ejemplo estuviste trabajando en un proyecto de Hello World en conjunto con muchas otras personas y queres traerte todos los cambios que se subieron desde que te actualizaste por ltima vez tendr as que hacer algo similar al siguiente ejemplo en que tomamos a github como el alias un alias es una forma amigable de llamar a una URL de un repositorio git git fetch github remote Counting objects 4006 done r
34. para simples adi ciones y supresiones de archivos Git fusionar las modificaciones de archivos Por ejemplo vamos a ver lo que sucede cuando editamos un archivo en una rama en otra rama lo renombramos y lo editamos y luego fusionar ambas ramas git branch master cat hello rb class HelloWorld def self hello puts Hello World end end HelloWorld hello As que primero vamos a crear una nueva rama llamada change_class y cam biar a ella por lo que sus cambios de nombre van a quedar aislados Vamos a cambiar cada instancia de Hello World a HiWorld 22 git checkout b change_class Switched to a new branch change_class vim hello rb head 1 hello rb class HiWorld git commit am changed the class name change_class 3467b0a changed the class name 1 files changed 2 insertions 4 deletions As que ahora que hemos commiteado los cambios de la rama change class para volver a la rama master el nombre de clase volver a lo que era antes de que cambiemos ramas Aqu podemos cambiar algo diferente en este caso la salida impresa y al mismo tiempo cambiar el nombre del archivo desde hello rb a ruby rb git checkout master Switched to branch master git mv hello rb ruby rb vim ruby rb git diff diff git a ruby rb b ruby rb index 2aabb6e bf64b17 100644 a ruby rb b ruby rb 1 7 1 7 class HelloWorld def self hello puts Hello World
35. rabajo Cuando est s listo para continuar desde donde dejaste ejecuta el comando git stash para traer de vuelta los cambios guardados en el directorio de trabajo git stash apply Un branch master Changes not staged for commit use git add lt file gt to update what will be committed use git checkout lt file gt to discard changes in working directory modified hello rb no changes added to commit use git add and or git commit a Si adem s queres borrar de la lista el tem que tomaste debes ejecutar git stash pop git stash drop remueve un tem de la lista de stashes Si corres el comando sin ning n par metro entonces remover el ltimo stash en cambio podes especificar un tem particular de la lista En el siguiente ejemplo se borra el anterior al ltimo 17 git stash drop stash0 1 Dropped stash 1 0b1478540189f30fef9804684673907c65865d8f Si queres borrar toda la lista entonces debes ejecutar el comando git stash clear Creando y administrando ramas Resulta til pensar en los branches como contextos ya que es la forma en que se usan m s a menudo Cuando realizas cambios de ramas se cambian los contextos en que se est n trabajando y pod s r pidamente cambiar de contexto entre las diferentes ramas En pocas palabras pod s crear una rama branch con git branch nombre de la rama branch cambiar a ese contexto con git checkout nombre de la rama branch
36. rchivos adentro as cd repositorio_nuevo ls README hello rb Se trata de un proyecto en el que estamos escribiendo ejemplos del Hola Mundo en todos los idiomas Hasta el momento s lo tenemos el c digo escrito en Ruby Para iniciar el control de versi n con Git podemos ejecutar git init git init Initialized empty Git repository in repositorio_nuevo git Ahora se puede ver que hay una subcarpeta oculta llamada git en el proyecto Este es tu repositorio donde se almacenan todos los cambios del proyecto ls a git README hello rb En pocas palabras se usa git init para convertir una carpeta existente en un nuevo repositorio Git Se puede hacer esto en cualquier carpeta en cualquier momento Nota Cuando se crea un repositorio con init la primera vez que haces un push tenes que correr git push origin master Adem s hay que crear el branch master y hacerle un commit con los archivos agregados para que aparezca Git clone copiar un repositorio Git Si tenes que colaborar con alguien en un proyecto o si deseas obtener una copia de un proyecto para poder ver o usar el c digo debes clonarlo Para lograrlo s lo tenes que ejecutar el comando git clone url con la URL del proyecto que deseas copiar git clone git github com schacon simplegit git Initialized empty Git repository in private tmp simplegit git remote Counting objects 100 done remote Compressing objects 100 86 86 d
37. repositorios en Git e Repositorios bare son generalmente usados en los servidores aunque puede generarse en cualquier directorio local de quien desee crearlo Se utiliza para compartir cambios provenientes de diferentes desarrolladores no se utiliza para crear u compartir cambios desde s mismo ya que no cuenta con esas funcionalidades e Repositorios de trabajo permiten crear archivos nuevos generar cambios a los archivos existentes y a su vez crear nuevas versiones en el repositorio Si se desea eliminar el repositorio local s lo debe borrarse la carpeta en la que se encuentra Repositorios remotos Git permite a los usuarios sincronizar el repositorio local con otros repositorios remotos al ambiente de trabajo local Los usuarios que posean los permisos nece sarios pueden hacer un push comando utilizado para subir cambios locales de los cambios locales al repositorio remoto A su vez tambi n pueden hacer un fetch o pull comandos para buscar cambios de los cambios realizados en repositorios remotos al local Repaso de algunos conceptos tiles e Repositorio Un repositorio contiene la historia las diferentes versiones en el tiempo y todas las diferentes ramas En Git cada copia del repositorio es un repositorio completo Si el repositorio en el que est s trabajando no es creado con la opci n bare entonces permite hacer un checkout de las revisiones que desees en tu repositorio local e W
38. rir con Editor de textos Abrir con Cortar Copiar Crear un enlace Renombrar Copiar a Mover a Mover a la papelera Volver a la versi n anterior Enviar a Actualizar Confirmar Push RabbitvCs Git Comprimir Ubuntu One Propiedades 36 Add Message Previous Messages Agregado de cambio XXXXX Changed Files double click to compare with base Ruta v Extensi n Estado amp test txt txt modified C select Deselect all Show unversioned files 1 elemento s encontrados Cancelar o README txt 37 Acepjar Crear una carpeta Crear un documento Restaurar los archivos que faltan Actualizar Confirmar Push RabbitVCS Git Ubuntu One Organizar los elementos Ampliar Reducir Tama o normal Propiedades 38 e Hacemos un push Se subir al servidor remoto todo lo commiteado en el repositorio Para m s informaci n y para bajarse la herramienta visitar el sitio oficial de la herramienta http rabbitves org Referencias e Se utilizaron algunas im genes cuya fuente provienen del sitio git scm com e La informaci n troncal del documento se redact bas ndose en el sitio oficial de gitref e El contenido est bajo la licencia Creative Commons Atribuci n CompartirIgual 4 0 Internacional 39
39. s 1 deletions Ahora ya grabamos la instant nea del archivo Si corremos el comando git status nuevamente veremos que tenemos nuevamente un directorio de trabajo limpio lo que significa que no hicimos ning n cambio desde nuestro ltimo commit git status On branch master nothing to commit working directory clean Si no ingresamos la opci n m git va a intentar abrir un editor de texto para que escribas el mensaje Algo como esto 12 Please enter the commit message for your changes Lines starting with A will be ignored and an empty message aborts the commit Un branch master Changes to be committed A use git reset HEAD lt file gt to unstage modified hello rb E git COMMIT_EDITMSG 9L 257C En este punto se agrega el mensaje de cambios en la parte superior del docu mento Todas las l neas que comienzan con se ignoran En general es muy importante escribir un buen mensaje de confirmaci n git commit a agrega autom ticamente en el staging area los cam bios de archivos que est n en seguimiento Si te parece que correr el comando git add cada vez que modificas un archivo es demasiado engorroso Git te permite saltar esta parte con la opci n a Esto le dice a Git que ejecute el git add en cualquier archivo que ya esta en seguimiento es decir cualquier archivo que se encontraba en tu ltimo commit y despu s fue modificado Esto te permite hacer un f
40. s a nuestra rama principal y vemos que algunos archivos volvieron a aparecer La ramifi caci n a sla con seguridad el trabajo que hacemos en contextos entre los que podemos cambiar Si comenz s a trabajar es muy til empezar siempre en una rama porque es r pido y f cil de hacer y luego fusionarlo y eliminar la rama cuando haya terminado De esta forma si lo que est s haciendo no se resuelve f cilmente pod s descartarlo y si ten s que cambiar de nuevo a un contexto m s estable el trabajo en curso es f cil de poner a un lado y luego volver Nota Cuando creas una rama hay que agregarla al archivo git config y configurar contra que hace el merge para que una vez que haces el push y luego el pull sepa contra que mergea lo que trae de la rama creada en el repositorio remoto Por ejemplo si creaste la rama dev entonces tendr s que agregar esto a tu config branch dev remote origin merge refs heads dev git push nombre remoto nombre de branch eliminar una rama remota Cuando hayas terminado de trabajar con una rama remota ya sea porque se fusion con el master remoto o si deseas abandonarla y eliminarla se emite un comando git push con un s mbolo de dos puntos para eliminar esa rama git push origin tidy cutlery To gitOgithub com octocat Spoon Knife git deleted tidy cutlery En el ejemplo anterior se ha borrado la rama tidy cutlery del branch remoto origin Una manera de recordar esto
41. sincronice con todos los remotos corriendo git fetch all git push subir las nuevas ramas y cambios a un repositorio remoto Para compartir tus commits con otros necesitas hacer un push de tus cambios a un repositorio remoto Para hacer esto tenes que correr el comando git push alias branch que intentar hacer tu branch el nuevo branch en el alias 32 remoto Veamos un ejemplo tratando de hacer un push inicial por primera vez de nuestra rama master al alias remoto github git push github master Counting objects 25 done Delta compression using up to 2 threads Compressing objects 100 25 25 done Writing objects 100 25 25 2 43 KiB done Total 25 delta 4 reused O delta 0 To gitCgithub com schacon hw git new branch master gt master Ahora si alguien clona el repositorio entonces tendr exactamente lo mismo que acabamos de subir junto con toda la historia Ahora Que pasa si tenes un branch como el llamado erlang del ejemplo anterior y queres compartir s lo ese Podes hacer un push nicamente de ese branch git push github erlang Counting objects 7 done Delta compression using up to 2 threads Compressing objects 100 6 6 done Writing objects 100 6 6 652 bytes done Total 6 delta 1 reused O delta 0 To gitCgithub com schacon hw git new branch erlang gt erlang Ahora cuando la gente haga un clon o un fetch sobre ese repositorio entonces
42. tom ticamente te arme los commits git add agregar los contenidos de archivos al staging area En Git tenes que agregar previamente los cambios realizados al staging area para luego poder hacer el commit correspondiente confirmar los cambios Si el archivo que est s agregando es nuevo entonces tenes que correr el comando git add para a adirlo inicialmente en tu staging area Si el archivo ya est en seguimiento tambi n tenes que correr el mismo comando git add no para agregar el archivo sino para agregar las nuevas modificaciones en tu staging area Volviendo al ejemplo de Hola Mundo una vez iniciado el proyecto empezaremos a agregarle archivos y para ello correremos el comando git add Podemos usar el comando git status para ver en que estado est nuestro proyecto git status s README 77 hello rb En este momento tenemos dos archivos que no est n bajo el seguimiento de Git Ahora podemos agregarlos git add README hello rb Ahora si corremos el comando git status nuevamente veremos que fueron agre gados git status s A README A hello rb Es tambi n com n agregar en forma recursiva todos los archivos en un nuevo proyecto especificando s lo el directorio de trabajo que se desea agregar como por ejemplo git add De esta manera Git comenzar a agregar todos los archivos que se encuentran en el directorio especificado En el ejemplo particular que estamos viendo git add hubiese hec
43. vos como su historia completa est n guardados en un repositorio Qu es un sistema de control de versiones distribuida En un sistema de control de versiones distribuida hay un servidor central para almacenar el repositorio y cada usuario puede hacer una copia completa del repositorio central mediante un proceso llamado clonaci n Cada repositorio clonado es una copia completa del repositorio central y por ser una copia com pleta posee la mismas funcionalidades que el repositorio original es decir con tiene la historia completa de la colecci n de archivos Cada repositorio clonado puede a su vez intercambiar las versiones de sus archivos con otros reposito rios clonados del mismo nodo padre ya que deben tener la misma estructura enviando sus cambios y recibiendo los del otro en forma directa o a trav s del repositorio central Qu es Git Git es un sistema de control de versiones distribuida que se origina a partir del desarrollo del kernel de Linux y es usado por muchos proyectos populares Open Source como ser Android o Eclipse as como tantos otros proyectos comerciales Entonces la principal diferencia entre Git y cualquier otro sistema de control de versiones es c mo Git modela sus datos Conceptualmente la mayor a de los dem s sistemas almacenan la informaci n como una lista de cambios en los archivos Estos sistemas modelan la informaci n que almacenan como un conjunto de archivos y las modificaciones hechas s
44. y tampoco queres perder los cambios entonces este comando es la soluci n git stash agrega los cambios actuales a la pila Este comando agarra todos los cambios del directorio de trabajo y del index y los pone en una lista para poder buscarlos posteriormente Despu s de correrlo te deja un directorio de trabajo limpio y te devuelve al estado del ltimo commit realizado git status s M hello rb git stash Saved working directory and index state WIP on master 5857ac1 hello with a flower HEAD is now at 5857ac1 hello with a flower git status Un branch master nothing to commit working directory clean 16 git stash list ver los stash que est n en la lista Al correr este comando nos devolver una lista con los stashes realizados git stash list stash0 0 WIP on master 5857ac1 hello with a flower El ltimo tem agregado en el stash ser referenciado por stashQ 0 e incremen tar a los que est n en una unidad vim hello rb git commit am it stops raining master ee2d2c6 it stops raining 1 files changed 1 insertions 1 deletions vim hello rb git stash Saved working directory and index state WIP on master ee2d2c6 it stops raining HEAD is now at ee2d2c6 it stops raining git stash list stash 0 WIP on master ee2d2c6 it stops raining stash0 1 WIP on master 5857ac1 hello with a flower git stash apply toma un tem de la lista de stashes y lo aplica al directorio de t
Download Pdf Manuals
Related Search
Related Contents
Samsung SCD27/D29 Camcorder User Manual User Guid Benutzerhandbuch Sharp PN-Y475 Brochure Technical Manual 1 2 Siemens 4100 Network Router User Manual PLANET`AIR operation manual cold water vertical pressure washer - Mi Smeg S45MCX1 Instructions for Use Copyright © All rights reserved.
Failed to retrieve file