Systèmes de gestion de versions : Git

TP #6 : Soigner ses commits ; Git sans serveur central

Pour faire des commits soignés

  • Sélectionner les morceaux à mettre dans un commit
    $ git add -p [fichier]
  • Compléter le dernier commit
    $ git commit --amend
  • Supprimer des commits
    $ git reset --soft <commit>          # ne touche pas aux fichiers, ni à l'index
    $ git reset --mixed <commit>         # l'index est réinitialisé
    $ git reset --hard <commit>          # les fichiers et l'index sont aussi réinitialisés
    Exemples :
    $ git reset --soft HEAD^             # supprime le dernier commit
    $ git reset --hard HEAD~3            # supprime les 3 derniers commits, et réinitialilse les fichiers
    $ git reset --hard                   # HEAD par défaut, supprime toutes les modifications non enregistrées
  • Modifier les derniers commits
    $ git rebase -i origin/main
  • Éviter un « merge » lors d'un git pull
    $ git pull --rebase

Git pretty : un petit flowchart pour illustrer le tout... (copie sur archive.org)

Utiliser Git sans serveur central

  • Initialisation d'un nouveau dépôt
    $ mkdir projet
    $ cd projet
    $ git init
    # puis : ajout de fichiers, git add, git commit, ...

    Autre exemple, avec des fichiers existant :

    $ tar zxf projet.tar.gz
    $ cd projet
    $ git init
    $ git add .
    $ git commit -m "Commit initial."
  • Copie d'un dépôt
    $ git clone /path/to/repo            # local
    $ git clone user@host:/path/to/repo  # distant, par ssh
  • Intégrer les changements d'un dépôt distant
    $ git pull <url> <branche>
    $ git fetch <url> <branche>

    Exemple :

    $ git fetch user@host:/path/to/repo main

Cf. gittutorial(7), « USING GIT FOR COLLABORATION » pour un scénario d'utilisation par Alice et Bob.