Git --projet-boite-à-outils

Mini-mémo git

Cette page recense des commandes utiles, qui ont été utilisées au moins une fois au cours du projet. Il n'est pas exhaustif, et d'autres commandes sont à découvrir au fil des explications de ce site.

Actions de base

Création d’un repository pour le dossier courant (récursif)
git init
Ajout d’un fichier aux fichiers à sauvegarder prochain commit
git add filename
Voir quel sont les fichiers qui seront ajoutés au prochain commit
git status
Sauvegarde d’un état (commit)
git commit –m "message"
Revenir à la dernière version sauvegardée d’un fichier
(il s'agit bien de deux tirets, séparés du nom par une espace)
git checkout -- filename
Corriger le message du dernier commit
git commit --amend -m "Fichier de sortie encodé en UFT8."
Note à propos de git add
Git add agit sur le contenu du fichier au moment où la commande est exécutée. Si vous modifiez ce même fichier avant de faire un commit, il faudra au préalable réutiliser la commande git sinon les modifications faites dans l'intervalle ne seront pas prises en compte.

Configuration de git

Lister la configuration
git config -l
Réécrire l’email de la configuration
git config --global user.email mail

Gestion des dépôts distants

Ajout du répertoire distant sous le raccourci githubrep (exemple)
git remote add githubrep https://github.com/titanix/projet_bao.git
Liste les répertoires distants enregistrés (alias seulement)
git remote
Listes les répertoires distants enregistrés (noms courts et adresse complètes)
git remote -v
Tomber d'une branche, ça peut faire mal
Avant de travailler avec les branches, sauvegardez au moyen de la commande commit toutes les modifications sur les fichiers suivit par git que vous voulez conserver, car quand on revient sur une branche, on arrive sur l'état du dernier commit.
J'ai malheureusement perdu un peu de travail de cette manière :(

Commit --amend

Une connerie de plus
Dans la série des choses à ne pas faire que je découvre en les faisant, il y a la modification d'un commit. Lorsque l'on a oublié un fichier lors d'un commit, ou qu'on veut en modifier le message, on peut utiliser l'option --amend lors du commit. Or, le cas de la seule modification de message excepté, cela crée en réalité un nouveau commit, et le dépôt distant ne va pas apprécier la nouvelle au prochain push.

Le commit amendé a en fait complètement supprimé de l'historique le précédent commit, qu'il est censé modifier. Ainsi, lors du push, le dépôt distant pense que l'on "saute dans le temps", ce qu'il n'autorise pas. Il faut donc rapatrier le code du dépôt au moyen de la commande pull, qui est en fait un fetch (téléchargement du code) suivit d'un merge (fusion du code local et du code téléchargé). Dans notre cas la fusion se fait sans aucun conflit, puisqu'il n'y a eu que l'ajout d'un fichier qui n'existait pas.
Il faut finalement pousser le résultat de la fusion (c'est à dire notre commit amendé maintenant compatible avec le dépôt distant) sur le dépot, au moyen de la commande push.

Voici ce que cela a donné dans mon cas. Les commandes tappées dans le shell sont en police normale, tandis que les résultats sont affichés en italique.

git add -f build/img/azure_deploy.png
git commit --amend
[master 2147e59] Travail sur le contenu du site et sa présentation.
 29 files changed, 541 insertions(+), 662 deletions(-)
 delete mode 100644 site/build/.html
 create mode 100644 site/build/code/build_site.pl
 create mode 100644 site/build/img/azure_deploy.png
 create mode 100644 site/content/copy/img/azure_deploy.png
 create mode 100644 site/content/site_perl.html
git push githubrep master
Username for 'https://github.com': louis....@....fr
Password for 'https://louis....@....fr@github.com': 
To https://github.com/titanix/projet_bao.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/titanix/projet_bao.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.
git pull githubrep master
Username for 'https://github.com': louis....@....fr
Password for 'https://louis....@....fr@github.com': 
From https://github.com/titanix/projet_bao
 * branch            master     -> FETCH_HEAD
Merge made by the 'recursive' strategy.
git push githubrep master
Username for 'https://github.com': louis....@....fr
Password for 'https://louis....@....fr@github.com': 
To https://github.com/titanix/projet_bao.git
   26b4d93..80cfd76  master -> master