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/ | + | |
- | + | ||
- | </ | + | |
- | + |