Outils pour utilisateurs

Outils du site


all:bibles:applications:git:bash

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
all:bibles:applications:git:bash [2025/03/14 09:03] – [Modification] omeylhocall:bibles:applications:git:bash [2025/12/03 15:12] (Version actuelle) – [Merge d'un fichier] omeylhoc
Ligne 1: Ligne 1:
 +====== Git Bash ======
 +
 +----
 +
 +===== Commandes =====
 +
 +==== git clone ====
 +
 +Clone le serveur dans le répertoire courant.
 +
 +<note tip>Pour obtenir le lien aller sur l'interface web et cliquer en haut à droite sur le bouton clone puis copier le lien « clone with ssh ».</note>
 +
 +=== Clone branche principale ===
 +
 +<code bash>
 +git clone <lien>
 +</code>
 +
 +=== Clone branche particulière ===
 +
 +<code bash>
 +git clone -b <nom de la branche> <lien>
 +</code>
 +
 +=== Clone à partir d'un tag ===
 +
 +<code bash>
 +git clone -b <tag> <lien>
 +</code>
 +
 +=== Cloner uniquement un répertoire à partir d'un tag ===
 +
 +<code bash>
 +git clone -b <tag> --filter=blob:none --sparse <lien>
 +cd <base>
 +git sparse-checkout add "répertoire"
 +</code>
 +
 +
 +==== git checkout ====
 +
 +Permet de se positionner sur une branche ou sur un tag.
 +
 +<code bash>
 +git checkout <branche>
 +git checkout <commit hash> -- <fichier>     # Pour récupérer une version spécifique d'un fichier à partir d'un commit particulier
 +git checkout HEAD -- <fichier>              # Pour revenir à la dernière version d'un fichier
 +git checkout HEAD~1 -- <fichier>            # Pour revenir à la version précédente d'un fichier
 +git checkout <branche> -- <nom_du_fichier>  # Pour récupérer la version d'un fichier depuis une branche spécifique
 +git restore <fichier>                       # pour annuler les modifications
 +</code>
 +
 +<note important>Attention de sauvegarder d'éventuelles modifications avant de lancer la commande !</note>
 +
 +==== git pull ====
 +
 +Met à jour la copie locale à partir du serveur.
 +
 +==== git add ====
 +
 +Ajoute un (ou des) fichier(s) au projet.
 +
 +<code bash>
 +git add <liste fichiers>
 +</code>
 +
 +==== git restore ====
 +
 +Efface les modifications faites sur un fichier
 +
 +<code bash>
 +git restore <fichier>
 +</code>
 +
 +==== git rm ====
 +
 +Supprime un (ou des) fichier(s).
 +
 +<code bash>
 +git rm <fichier>
 +</code>
 +
 +==== git mv ====
 +
 +Renome un (ou des) fichier(s). On doit rester sur le même repository.
 +
 +<code bash>
 +git mv <oldname> <newname>
 +</code>
 +
 +==== git reset HEAD ====
 +
 +Supprime un fichier de la liste des fichiers à commiter
 +
 +<code bash>
 +git reset HEAD <fichier>
 +</code>
 +
 +==== git status ====
 +
 +Liste l'état des fichiers.
 +
 +==== git commit ====
 +
 +Prise en compte de fichiers.
 +
 +<code bash>
 +git commit -m "commentaire" <liste fichiers>
 +</code>
 +
 +Possibilité de prendre en compte tous les fichiers avec l'option -a (all)
 +
 +<code bash>
 +git commit -am "commentaire" <liste fichiers>
 +</code>
 +
 +==== git push ====
 +
 +Remonte les modifications sur le serveur.
 +
 +==== git log ====
 +
 +Lister l'historique des commits
 +
 +<code bash>
 +git log [<fichier>]
 +git log -p <fichier>                                  # liste les commits avec les modifications
 +git log --graph --oneline                             # affiche la liste des commits sur une ligne
 +git log --pretty=oneline [<fichier>                 # idem
 +git log --since="2025-07-01" --until="2025-07-31"     # commits entre 2 dates
 +git log <tag1>...<tag2>                               # commits entre 2 tags
 +git log --author="Paul Bismuth"                       # commits d'une personne donné
 +git log --grep="texte" -i                             # commits contenant un texte spécifique (-i pour ignore case)
 +git log -- chemin/vers/fichier.txt                    # commits affectant un fichier spécifique
 +git log --decorate --oneline                          # pour voir l'historique des commits et la pose des tags 
 +git log --name-status                                 # pour avoir les fichiers concernés (A : Added M : Modified D : Deleted R : Renamed C : Copied)
 +git log --date=iso --pretty=format:"%H|%an|%ad|%s"    # format personnalisé 
 +</code>
 +
 +=== Format personnalisé ===
 +
 +<code>
 +%H  : Hash complet du commit
 +%h  : Hash abrégé du commit
 +%T  : Hash complet de l'arbre
 +%t  : Hash abrégé de l'arbre
 +%P  : Hashes des parents
 +%p  : Hashes abrégés des parents
 +%an : Nom de l'auteur
 +%ae : Email de l'auteur
 +%ad : Date de l'auteur (respecte le format --date=)
 +%ar : Date relative de l'auteur (ex: "il y a 2 jours")
 +%ai : Date de l'auteur au format ISO 8601
 +%cn : Nom du committer
 +%ce : Email du committer
 +%cd : Date du commit (respecte le format --date=)
 +%cr : Date relative du commit
 +%ci : Date du commit au format ISO 8601
 +%d  : Références (branches, tags)
 +%D  : Références sans les "() " autour
 +%s  : Sujet du commit (première ligne du message)
 +%f  : Sujet formaté sous forme de nom de fichier
 +%b  : Corps du message de commit
 +%B  : Message de commit complet (sujet + corps)
 +%N  : Notes du commit
 +%GG : Signature GPG
 +%G? : Statut de vérification de la signature GPG
 +%GS : Signature GPG
 +%GK : Clé de signature GPG
 +</code>
 +
 +==== git diff ====
 +
 +  * Lister la liste des commits avec la commande **git log** ci-dessus
 +
 +=== Console ===
 +
 +<code bash>
 +git diff <fichier>                   # pour voir les évolutions par rapport au dernier commit
 +git diff <commit hash> <fichier>     # pour voir les évolutions par rapport à un commit donné
 +</code>
 +
 +=== Graphiquement ===
 +
 +<code bash>
 +git difftool HEAD~1 <fichier>                   # différence par rapport à la version précédente
 +git difftool <commit1> <commit2> <fichier>      # différence entre 2 commits du fichier
 +git difftool master <fichier>                   # Pour comparer avec la branche master
 +git difftool                                    # Pour voir tous les changements non commités
 +git difftool <tag1>:<fichier> <tag2>:<fichier>  # pour comparer un fichier entre 2 tags
 +</code>
 +
 +==== gitk ====
 +
 +Permet de lancer une interface graphique
 +
 +<code bash>
 +gitk <fichier>
 +</code>
 +
 +----
 +
 +===== Merge =====
 +
 +==== Merge d'un fichier ====
 +
 +Exemple merge du fichier .gitlab-ci.yaml depuis la branche migration_engine vers la branche develop
 +
 +<code bash>
 +git branch -a                               # pour vérifier le nom complet de la branche
 +git pull origin develop                     # pour mettre à jour le repo avec la branche develop
 +git checkout <branche> -- <fichier>         # on récupère la version du fichier depuis la branche souhaitée
 +git add <fichier>                           # optionnel si le fichier n'existait pas dans la branche develop
 +git commit -m "Merge du fichier <fichier>"
 +git push origin develop
 +</code>
 +
 +----
 +
 +===== Gestion droits unix =====
 +
 +==== Interrogation ====
 +
 +<code bash>
 +git ls-files --stage
 +</code>
 +
 +  * 100644 : fichier classique
 +  * 100755 : fichier avec les droits d'exécution (+x)
 +  * 040000 : répertoire
 +  * 120000 : lien symbolique
 +
 +==== Modification ====
 +
 +=== Rendre un fichier exécutable ===
 +
 +<code bash>
 +chmod +x <fichier>
 +git update-index --chmod=+x <fichier>
 +</code>
 +
 +=== Rendre un fichier non exécutable ===
 +
 +<code bash>
 +git update-index --chmod=-x <fichier>
 +</code>
 +
 +<note important>Ne fonctionne que depuis un vrai système linux, pas à partir de Git bash</note>
 +
 +==== Création d'un fichier exécutable ====
 +
 +A partir de Git 2.9 il est possible de créer un fichier directement comme exécutable :
 +
 +<code bash>
 +git add --chmod=+x <fichier>
 +</code>
 +
 +==== Dépannage ====
 +
 +En cas de problème essayer de retirer puis de remettre les droits :
 +
 +<code bash>
 +git update-index --chmod=-x <fichier>
 +git update-index --chmod=+x <fichier>
 +</code>
 +
 +
 +
 +----
 +
 +===== Gestion tag =====
 +
 +==== Interrogation ====
 +
 +=== Lister tous les tags ===
 +
 +<code bash>
 +git tag -n
 +git tag -n --sort=refname            # dans l'ordre des noms de tag (par défaut)
 +git tag -n --sort=committerdate      # dans l'ordre chronologique
 +</code>
 +
 +=== Lister les tags suivant un patern ===
 +
 +<code bash>
 +git tag -l "v1.4.*"
 +</code>
 +
 +=== Interroger le contenu d'un tag ===
 +
 +<code bash>
 +git show v1.4.5
 +git show --pretty= --name-only v1.4.5
 +</code>
 +
 +==== Positionnement ====
 +
 +=== Choisir quel commit tagger ===
 +
 +<code bash>
 +git log
 +git log --author "MEYLHOC Olivier"    # pour ne voir que les commit d'une personne 
 +</code>
 +
 +=== Poser un tag localement et le remonter sur le serveur ===
 +
 +<code bash>
 +git tag -a <tag> <commit_ID>
 +git push origin <tag>
 +</code>
 +
 +=== Déplacer un tag localement et le remonter sur le serveur ===
 +
 +<code bash>
 +git tag -f <tag> <commit_ID>
 +git push origin <tag> --force
 +</code>
 +
 +==== Effacer ====
 +
 +  * Effacer un tag localement
 +
 +<code bash>
 +git tag -d <tag>
 +</code>
 +
 +  * Effacer un tag sur le serveur
 +
 +<code bash>
 +git push origin --delete <tag>
 +</code>
 +
 +==== Checkout ====
 +
 +Il est possible de voir les versions de fichier correspondant à un tag en faisant un checkout à partir de celui-ci :
 +
 +<code bash>
 +git checkout <tag>
 +</code>
 +
 +<note warning>Eviter de faire des modifications à partir de cet état « detached HEAD ».</note>
 +
 +Pour faire des modifications il est préférable de créer une nouvelle branche à partir du tag :
 +
 +<code bash>
 +git checkout -b <nouvelle branche> <tag>
 +</code>
 +
 +----