Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
| technique:git:git_avancees [2020/06/13 00:51] – francoisa | technique:git:git_avancees [2024/04/02 15:08] (Version actuelle) – modification externe 127.0.0.1 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | ====== Git : fonctionnalités avancées ====== | + | **Cette page est obsolète. Veuillez accéder |
| - | + | ||
| - | Pour pouvoir utiliser pleinement Git, il peut être utile de s' | + | |
| - | + | ||
| - | ===== 1. Création de branches ===== | + | |
| - | + | ||
| - | On crée une nouvelle branche | + | |
| - | + | ||
| - | < | + | |
| - | git branch nouvellebranche | + | |
| - | + | ||
| - | </code> | + | |
| - | + | ||
| - | On passe sur la branche nouvellebranche | + | |
| - | + | ||
| - | < | + | |
| - | git checkout nouvellebranche | + | |
| - | + | ||
| - | </code> | + | |
| - | + | ||
| - | ou plus directement : | + | |
| - | + | ||
| - | < | + | |
| - | git checkout -b nouvellebranche | + | |
| - | + | ||
| - | </ | + | |
| - | + | ||
| - | On peut faire des commits (git add & git commit) sur cette branche. On peut aussi repasser sur la branche principale et en faire d' | + | |
| - | + | ||
| - | < | + | |
| - | git checkout master | + | |
| - | + | ||
| - | </code> | + | |
| - | + | ||
| - | Il est aussi possible de venir se placer sur un commit, une branche ou un tag précédent : | + | |
| - | + | ||
| - | < | + | |
| - | git checkout nomcommit | + | |
| - | git checkout vieillebranche | + | |
| - | git checkout nomtag | + | |
| - | + | ||
| - | </code> | + | |
| - | + | ||
| - | (Voir git checkout -h) | + | |
| - | + | ||
| - | ===== 2. Fusion de branche (merge) ===== | + | |
| - | + | ||
| - | On repasse sur la branche master | + | |
| - | + | ||
| - | < | + | |
| - | git checkout master | + | |
| - | + | ||
| - | </ | + | |
| - | + | ||
| - | Et on fusionne la branche souhaitée vers la branche en cours (master) | + | |
| - | + | ||
| - | < | + | |
| - | git merge nouvellebranche | + | |
| - | + | ||
| - | </ | + | |
| - | + | ||
| - | Puis on peut supprimer la branche en cours : | + | |
| - | + | ||
| - | < | + | |
| - | git branch -d nouvellebranche # Si status est à jour | + | |
| - | ou | + | |
| - | git branch -D nouvellebranche # si pas fusionnée | + | |
| - | + | ||
| - | </ | + | |
| - | + | ||
| - | ===== Gestion de conflits ===== | + | |
| - | + | ||
| - | En cas de merge conflictuel, | + | |
| - | + | ||
| - | Il faut éditer les fichiers en conflit et finir avec un : | + | |
| - | + | ||
| - | < | + | |
| - | git add fichiers_en_conflit | + | |
| - | git commit | + | |
| - | + | ||
| - | </ | + | |
| - | + | ||
| - | Il est possible d' | + | |
| - | + | ||
| - | < | + | |
| - | git mergetool fichier_en_conflit | + | |
| - | + | ||
| - | </ | + | |
| - | + | ||
| - | Il est possible de merger sans créer de nouveau commit : | + | |
| - | + | ||
| - | < | + | |
| - | git merge --no-commit nouvellebranche | + | |
| - | + | ||
| - | </code> | + | |
| - | + | ||
| - | Puis modifier/corriger les fichiers et enfin d' | + | |
| - | + | ||
| - | Il est alors aussi possible d' | + | |
| - | + | ||
| - | < | + | |
| - | git merge --abort | + | |
| - | + | ||
| - | </ | + | |
| - | + | ||
| - | ===== Travail collaboratif ===== | + | |
| - | + | ||
| - | Récupérer un dépot distant avec : | + | |
| - | + | ||
| - | < | + | |
| - | git clone url_distant | + | |
| - | + | ||
| - | </ | + | |
| - | + | ||
| - | Dans ce cas, l' | + | |
| - | + | ||
| - | git fetch permet de récupérer les branches distantes. Attention, git pull <⇒ git fetch | + | |
| - | + | ||
| - | < | + | |
| - | git pull # récupère les sources et merge les différences | + | |
| - | git fetch # récupère les sources sans fusionner | + | |
| - | + | ||
| - | </ | + | |
| - | + | ||
| - | git pull = git fetch + git merge FETCH_HEAD | + | |
| - | + | ||
| - | Pour voir les différences avec le dépot distant : | + | |
| - | + | ||
| - | < | + | |
| - | git remote | + | |
| - | git branch -r # pour voir les branches distantes connues localement | + | |
| - | git branch -vv # si la branche loclae est trackée | + | |
| - | + | ||
| - | </ | + | |
| - | + | ||
| - | ===== Ajout d'un dépot supplémentaire distant ===== | + | |
| - | + | ||
| - | < | + | |
| - | git remote add nomchoisi urldepot.git | + | |
| - | + | ||
| - | git fetch nomchoisi | + | |
| - | + | ||
| - | </ | + | |
| - | + | ||
| - | Et pour mettre à jour le dépot local vers ce dépot distant : | + | |
| - | + | ||
| - | < | + | |
| - | git push -u nomchoisi master | + | |
| - | + | ||
| - | </ | + | |
| - | + | ||
| - | Attention, il faudra mettre à jour les 2 dépots de manière manuelle. Par exemple : | + | |
| - | + | ||
| - | < | + | |
| - | git push heroku master | + | |
| - | + | ||
| - | git push -u nomchoisi master | + | |
| - | + | ||
| - | </ | + | |
| - | + | ||
| - | ===== Gestion d'un dépot avec authentification par clef SSH ===== | + | |
| - | + | ||
| - | 1) Ajouter sa clef SSH publique dans son profil du dépot distant (github, framagit…) | + | |
| - | + | ||
| - | 2) Définir par défaut l' | + | |
| - | < | + | |
| - | Host github.com | + | |
| - | | + | |
| - | + | ||
| - | </ | + | |
| - | + | ||
| - | 3) définir pour le dépot git local que l' | + | |
| - | < | + | |
| - | [remote " | + | |
| - | url = ssh:// | + | |
| - | + | ||
| - | </ | + | |
| - | + | ||
| - | Et c'est tout. Au prochain '' | + | |
| - | ===== Gestion d'un fork d'un projet distant ===== | + | |
| - | + | ||
| - | Cas fréquent : on veut contribuer à un projet existant : | + | |
| - | + | ||
| - | - On forke le projet existant depuis la plateforme | + | |
| - | - On clone ce projet localement sur son PC (git clone) | + | |
| - | - On crée une nouvelle branche locale de développement (git branch nouvbranche && git checkout nouvbranche) | + | |
| - | - on ajoute cette branche distante | + | |
| - | - On modifie le code, on commite (git commit -m " | + | |
| - | - On retourne sur la plateforme et on crée une PR Pull Request | + | |
| - | + | ||
| - | **Problème** | + | |
| - | + | ||
| - | Il faut définir un dépot upstream du dépot existant : | + | |
| - | + | ||
| - | < | + | |
| - | git remote add upstream git@github.com: | + | |
| - | git fetch upstream # on se calle sur upstream et on affiche les branches disponibles | + | |
| - | git checkout master # pour se mettre localement sur la branche master | + | |
| - | git reset --hard upstream/ | + | |
| - | + | ||
| - | </ | + | |
| - | + | ||
| - | On n' | + | |
| - | + | ||
| - | < | + | |
| - | git checkout -b nouvellebranche | + | |
| - | + | ||
| - | </ | + | |
| - | + | ||
| - | La fois suivante, pour remettre à jour : | + | |
| - | + | ||
| - | < | + | |
| - | git checkout master # pour se mettre localement sur la branche master | + | |
| - | git reset --hard upstream/ | + | |
| - | git fetch upstream | + | |
| - | + | ||
| - | </ | + | |
| - | + | ||
| - | ===== Pour récupérer des commits d' | + | |
| - | + | ||
| - | Se placer dans la branche qui contient les anciens commits : | + | |
| - | + | ||
| - | < | + | |
| - | git checkout anciennebranche | + | |
| - | git log # pour afficher les commits du plus récent au plus ancien idcommit3, idcommit2, idcommit1 | + | |
| - | git checkout master # pour repasser dans la branche master | + | |
| - | git checkout -b nouvellebranche # pour créer et se placer dans la nouvelle branche | + | |
| - | git cherry-pick idcommit1 idcommit2 idcommit3 | + | |
| - | git log # pour afficher les commits récupérés | + | |
| - | git branch --track master origin/ | + | |
| - | + | ||
| - | </ | + | |
| - | + | ||