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 | ||
| memo:git [12/01/2016 10:23] – Corriger error: refs does not point to a valid object Arnaud Jacquemin | memo:git [10/12/2024 11:39] (Version actuelle) – Gestion des branches Arnaud Jacquemin | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| ====== Git====== | ====== Git====== | ||
| + | |||
| + | ===== Récupérer sources depuis un dépôt ===== | ||
| + | |||
| + | <code bash> | ||
| + | git clone git@framagit.org: | ||
| + | </ | ||
| + | |||
| + | Pour Framagit, renseigner au préalable dans les paramètres du compte la clé publique du PC, à récuperer dans '' | ||
| + | |||
| + | |||
| + | ===== Récupérer les changements d'un dépôt distant ===== | ||
| + | |||
| + | Resynchronise le dépôt local avec le dépôt distant. Ne change rien dans l' | ||
| + | |||
| + | <code bash> | ||
| + | # Avec " | ||
| + | git fetch origin | ||
| + | </ | ||
| + | |||
| + | ===== Gestion des branches ===== | ||
| + | |||
| + | Créer une branche : ((https:// | ||
| + | <code bash> | ||
| + | git branch nomdelabranche | ||
| + | </ | ||
| + | |||
| + | Basculer sur cette branche : ((https:// | ||
| + | <code bash> | ||
| + | git checkout nomdelabranche | ||
| + | </ | ||
| + | |||
| + | Faire ces deux actions (créer et basculer sur une nouvelle branche) en une seule commande avec un raccourci : ((https:// | ||
| + | <code bash> | ||
| + | git checkout -b nomdelabranche | ||
| + | </ | ||
| + | |||
| + | Fusionner les changements d'une autre branche (de //hotfix// vers //main// dans cet exemple) : | ||
| + | <code bash> | ||
| + | git checkout main | ||
| + | git merge hotfix | ||
| + | </ | ||
| + | |||
| + | Re-baser son travail sur une autre branche, par exemple avant de demander la fusion de ses changements dans cette branche. Résultat similaire à un '' | ||
| + | ⚠️ À ne pas faire sur une branche publique qui a potentiellement servi de base à d' | ||
| + | <code bash> | ||
| + | # Re-baser l' | ||
| + | git rebase develop | ||
| + | </ | ||
| + | |||
| + | Obtenir la liste des branches : | ||
| + | <code bash> | ||
| + | git branch | ||
| + | # Uniquement celles qui n'ont pas encore été fusionnées : | ||
| + | git branch --no-merged | ||
| + | </ | ||
| + | |||
| + | Supprimer une branche : | ||
| + | <code bash> | ||
| + | git branch -d hotfix | ||
| + | </ | ||
| + | |||
| + | Renommer une branche, par exemple de //master// vers //main// ((https:// | ||
| + | <code bash> | ||
| + | git branch --move master main | ||
| + | # L' | ||
| + | git push --set-upstream origin main | ||
| + | # Supprimer l' | ||
| + | git push origin --delete master | ||
| + | # Vérifier le résultat : | ||
| + | git branch --all | ||
| + | </ | ||
| + | |||
| + | ===== Obtenir statut de l' | ||
| + | |||
| + | <code bash> | ||
| + | git status | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Créer dépôt de travail à partir de sources ===== | ||
| + | |||
| + | A la racine des sources, jouer les commandes suivantes : | ||
| + | |||
| + | <code bash> | ||
| + | git init | ||
| + | git add . | ||
| + | git commit -m ' | ||
| + | </ | ||
| + | |||
| + | Sources : [[https:// | ||
| + | |||
| + | |||
| ===== Créer dépôt nu (" | ===== Créer dépôt nu (" | ||
| Ligne 9: | Ligne 101: | ||
| </ | </ | ||
| - | Sources : [[http:// | + | Exemple avec un dossier SMB (sous windows) |
| - | Sinon, créer depuis les sources | + | <code dos> |
| + | git clone --bare "C:\Users\ajacquemin\Sources\dsi\nom_depot" | ||
| + | </ | ||
| + | |||
| + | Exemple sous Linux | ||
| <code bash> | <code bash> | ||
| - | mv project project.git | + | git clone --bare |
| - | cd project.git | + | |
| - | git init --bare --shared | + | |
| - | git add . | + | |
| - | git commit -m ' | + | |
| </ | </ | ||
| + | |||
| + | Sources : [[http:// | ||
| + | |||
| + | |||
| ===== Gestion des dépôts distants (remote) ===== | ===== Gestion des dépôts distants (remote) ===== | ||
| Ligne 36: | Ligne 132: | ||
| <code bash> | <code bash> | ||
| - | git remote add origin "///Efiles.feel-it.mad\xanit\sources_dvpt\git\gdm\ecommerce\ExportJobGDMToSparkow.git" | + | git remote add origin "///serveur-de-fichiers\dossier\depot.git" |
| </ | </ | ||
| - | Remplacer | + | Si besoin remplacer |
| - | ==== Changer URL ==== | + | ==== Modifier |
| <code bash> | <code bash> | ||
| - | $ git remote set-url origin "///Efiles.feel-it.mad\xanit\sources_dvpt\git\gdm\ecommerce\flux-probance.git" | + | # Changer l'URL d'un dépôt distant |
| + | $ git remote set-url origin "….git" | ||
| + | |||
| + | # Renommer un dépôt distant | ||
| + | $ git remote rename origin newname | ||
| </ | </ | ||
| - | Remplacer '' | + | Remplacer '' |
| + | ===== Lister changements d'un commit ===== | ||
| + | |||
| + | Obtenir la liste de tous les fichiers modifiés par un commit donné | ||
| + | |||
| + | <code bash> | ||
| + | git diff-tree --no-commit-id --name-only -r <commit id> | ||
| + | </ | ||
| + | |||
| + | Source : http:// | ||
| + | |||
| + | |||
| + | ===== Comparer deux branches ===== | ||
| + | |||
| + | Liste tous les fichiers qui diffèrent entre deux branches : | ||
| + | |||
| + | <code bash> | ||
| + | git diff --stat=120 branche1..branche2 | ||
| + | </ | ||
| + | |||
| + | Source : http:// | ||
| ===== Changer date d'un commit ===== | ===== Changer date d'un commit ===== | ||
| Ligne 64: | Ligne 184: | ||
| Source : http:// | Source : http:// | ||
| + | ===== Changer auteur d'un commit ===== | ||
| + | |||
| + | <file bash git-author-rewrite.sh> | ||
| + | #!/bin/sh | ||
| + | |||
| + | git filter-branch --env-filter ' | ||
| + | |||
| + | OLD_EMAIL=" | ||
| + | CORRECT_NAME=" | ||
| + | CORRECT_EMAIL=" | ||
| + | |||
| + | if [ " | ||
| + | then | ||
| + | export GIT_COMMITTER_NAME=" | ||
| + | export GIT_COMMITTER_EMAIL=" | ||
| + | fi | ||
| + | if [ " | ||
| + | then | ||
| + | export GIT_AUTHOR_NAME=" | ||
| + | export GIT_AUTHOR_EMAIL=" | ||
| + | fi | ||
| + | ' --tag-name-filter cat -- --branches --tags | ||
| + | </ | ||
| ===== Annuler un commit ===== | ===== Annuler un commit ===== | ||
| - | Supprimer définitivement le dernier commit non pushé : | + | ==== Non poussé ==== |
| - | git reset --hard HEAD~1 | ||
| - | Supprimer le dernier commit non pushé tout en conservant les modifications dans la staging area : | + | Supprimer |
| + | <code bash> | ||
| + | git reset --hard HEAD~1 | ||
| + | </ | ||
| - | git reset --soft HEAD~1 | ||
| - | Revenir dans l’étant du commit | + | Supprimer le dernier |
| + | <code bash> | ||
| + | git reset --soft HEAD~1 | ||
| + | </ | ||
| - | | + | |
| + | ==== Déjà poussé ==== | ||
| + | |||
| + | Revenir dans l’étant du commit précédent en appliquant un nouveau commit qui est exactement l’opposé du précédent : très pratique pour annuler un commit qui a déjà été poussé, et qu’on ne peut donc pas supprimer du dépôt central sans gêner les collaborateurs : | ||
| + | |||
| + | <code bash> | ||
| + | git revert HEAD~1 | ||
| + | </ | ||
| Source : http:// | Source : http:// | ||
| + | |||
| + | |||
| + | Annuler partiellement un commit déjà poussé : | ||
| + | |||
| + | <code bash> | ||
| + | git revert < | ||
| + | git reset # sortir les modification de la staging area | ||
| + | # effectuer les éventuelles corrections souhaitées | ||
| + | git add < | ||
| + | git checkout . # pour ne pas modifier les autres fichiers (d'où l' | ||
| + | git commit | ||
| + | </ | ||
| + | |||
| + | Source : http:// | ||
| + | |||
| ===== Dépôt sur OVH ===== | ===== Dépôt sur OVH ===== | ||
| <code bash> | <code bash> | ||
| - | ssh login@ssh.cluster006.ovh.net | + | LOGINOVH=login |
| + | ssh ${LOGINOVH}@ssh.cluster006.ovh.net | ||
| #Sur le serveur OVH | #Sur le serveur OVH | ||
| - | mkdir -p ~/sources/nom_projet.git | + | NOMPROJET=nom_projet |
| - | cd ~/sources/nom_projet.git | + | mkdir -p ~/sources/${NOMPROJET}.git |
| + | cd ~/sources/${NOMPROJET}.git | ||
| git init --bare | git init --bare | ||
| </ | </ | ||
| Ligne 95: | Ligne 266: | ||
| <code bash> | <code bash> | ||
| #En local | #En local | ||
| - | cd ./nom_projet | + | NOMPROJET=nom_projet |
| - | git remote add ovh ssh://login@ssh.cluster006.ovh.net/ | + | LOGINOVH=login |
| + | cd ./${NOMPROJET} | ||
| + | git remote add ovh ssh://${LOGINOVH}@ssh.cluster006.ovh.net/ | ||
| git push ovh master | git push ovh master | ||
| </ | </ | ||
| Ligne 103: | Ligne 276: | ||
| A lire aussi : https:// | A lire aussi : https:// | ||
| + | |||
| ===== Corriger error: refs does not point to a valid object ===== | ===== Corriger error: refs does not point to a valid object ===== | ||
| Ligne 111: | Ligne 285: | ||
| Cf. http:// | Cf. http:// | ||
| + | |||
| + | |||
| + | ===== Supprimer un tag ===== | ||
| + | |||
| + | <code bash> | ||
| + | git push --delete origin tagname | ||
| + | git tag -d tagname | ||
| + | </ | ||
| + | |||
| + | Source : http:// | ||
| + | |||
| + | |||
| + | ===== Supprimer toutes les modifications locales ===== | ||
| + | |||
| + | Remove untracked files from the current directory as well as any files that Git usually ignores. | ||
| + | |||
| + | <code bash> | ||
| + | # Undo changes in tracked files | ||
| + | git reset --hard | ||
| + | # Remove untracked files | ||
| + | git clean -df | ||
| + | </ | ||
| + | |||
| + | Source : https:// | ||
| + | |||
| + | |||