On Github fabien0102 / formationgit
Formateur : Fabien BERNARD / @fabien0102
Autrement dit, chaque personne qui clone un dépot git, n'est pas dépendant du serveur.
Il peut donc se synchroniser quand il veut, envoyer ses modifications à sa guise, etc…
Certe on peut travailler hors-ligne, et c'est cool, mais une fois que nos commits sont envoyés au serveur :
On ne peut plus les modifier !!
La commande qui me permet de savoir où j'en suis.
$ git status
# On branch master # Changes to be committed: # (use "git reset HEAD ..." to unstage) # # modified: index.html # # Changes not staged for commit: # (use "git add ..." to update what will be committed) # (use "git checkout -- ..." to discard changes in working directory) # # modified: index.html # # Untracked files: # (use "git add ..." to include in what will be committed) # # lib/css/gitgraph.css # lib/js/gitgraph.min.js
$ git add index.html $ git commit
i pour passer en mode edition
Mon super message # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # On branch master # Changes to be committed: # (use "git reset HEAD ..." to unstage) # # modified: index.html # ~
:x pour enregistrer
Avec cette commande je peux voir tous mes commits et ceux des autres
$ git log
commit efec542ed94bb10d02a1442f06893b41f881c7f9 Author: Nicolas Carlo Date: Fri Dec 20 18:01:05 2013 +0100 Misc. updates commit ed3322b55b40526e56997f2288a48665e40437c4 Author: Nicolas Carlo Date: Fri Dec 20 18:01:33 2013 +0100 Quickly fix timers position into popover commit 42669899ab4021f3ed64095576745cfe71fad405 Author: Nicolas Carlo Date: Fri Dec 20 17:59:11 2013 +0100 Refactor building styling
THE commande à connaître, c'est cette commande qui me permet de naviguer dans l'histoire
$ git checkout ed3322b55b4052
Note : checking out 'ed3322b55b4052'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b new_branch_name HEAD is now at ed3322b... Quickly fix timers position into popover
À noter : On peut aussi checkout sur des tag et des branch
Mais git va plus loin qu'un simple système de versionning plat.
Git introduit une notion de branch qui va nous permettre de faire cohabiter plusieurs réalités !
Création d'une nouvelle branche :
$ git branch mybranch $ git checkout mybranch
ou
$ git checkout -b mybranch
Je peux maintenant faire des commits qui seront sur cette branche
Ici nous avons deux versions de code qui cohabitent.
Les deux bouts de code associés aux commits blanc ne peuvent (pour l'instant) pas être executé en même temps.
$ git checkout master $ git merge develop
Mes deux versions de code ont été merge.
J'ai maintenant mon code en entier sur master (en gris sur notre example).
J'ai maintenant le choix de continuer de commit sur ma branche, la laisser de côté, ou la supprimer.
J'ai décidé de la supprimer :
$ git branch -d develop
$ git clone https://github.com/fabien0102/formationgit.git
Et voilà le code est copié sur ma machine.
Je peux voir qu'une remote est automatiquement ajoutée.
$ git remote -v origin git@github.com:fabien0102/formationgit.git (fetch) origin git@github.com:fabien0102/formationgit.git (push)
Je peux aussi constater que j'ai les branches distantes sur mon pc.
$ git branch --all * master remotes/origin/master
Parfois il arrive que j'ai des modifications en cours que ne veux pas commiter.
Heureusement je peux mettre ces modifications de côté et les récupérer quand je veux.
$ git stash
Et hop il n'y a plus rien !
$ git stash pop
Tadaaaaaaaa, tout est réapparru !
$ git pull
Je suis sur master et je viens de récupérer les commits du serveur.
La branche grise est la distante, en faisant un git pull, je merge la branche distante dans la local.
Le "problème" c'est que je viens de faire un commit de merge, celui-ci n'est pas obligatoire.
$ git pull --rebase
Et voilà, mes modifications (non présente sur le serveur) sont repassés après les commits distants récupérés
$ git push
Et hop ! Tout le monde à mes modifications ! (Du coup je ne peux plus les modifier)
Je peux aussi décider de créer une nouvelle branche distante
$ git push origin myBadassFeature
ou d'en supprimer
$ git push origin :myBadassFeature