{"id":70443,"date":"2023-06-26T17:32:30","date_gmt":"2023-06-26T16:32:30","guid":{"rendered":"https:\/\/kinsta.com\/fr\/?p=70443&#038;preview=true&#038;preview_id=70443"},"modified":"2023-08-22T12:06:46","modified_gmt":"2023-08-22T11:06:46","slug":"git-avance","status":"publish","type":"post","link":"https:\/\/kinsta.com\/fr\/blog\/git-avance\/","title":{"rendered":"Git avanc\u00e9 : Des commandes puissantes au-del\u00e0 des bases"},"content":{"rendered":"<p><a href=\"https:\/\/git-scm.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Git<\/a> est un outil puissant pour le contr\u00f4le de version et poss\u00e8de une sorte de monopole dans ce domaine. Pour la plupart des t\u00e2ches quotidiennes, Git peut \u00eatre simple \u00e0 utiliser gr\u00e2ce \u00e0 la r\u00e9p\u00e9tition des commandes. Cependant, il existe de nombreuses situations o\u00f9 vous avez besoin de plus que les bases. C&rsquo;est pourquoi il existe de nombreuses commandes Git avanc\u00e9es qui vous permettront de passer \u00e0 la vitesse sup\u00e9rieure.<\/p>\n<p>Cela vous permettra \u00e9galement de vous familiariser avec des concepts Git que vous n&rsquo;avez pas l&rsquo;habitude de rencontrer. Par exemple, l&rsquo;archivage par opposition \u00e0 la validation des modifications, le rebasage et l&rsquo;ajout de fichiers \u00e0 votre zone de staging. Une fois que vous les aurez assimil\u00e9s, vous constaterez peut-\u00eatre que vous avez encore plus de valeur pour votre \u00e9quipe.<\/p>\n<p>Dans cet article de blog, nous vous pr\u00e9sentons diff\u00e9rentes commandes puissantes que vous souhaitez conna\u00eetre. Cependant, pour les utiliser, vous devez disposer de certaines comp\u00e9tences, de certains concepts et de certaines informations. Voyons d&rsquo;abord cela.<br \/>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc><\/p>\n<h2>Conditions pr\u00e9alables recommand\u00e9es<\/h2>\n<p>Bien que vous soyez capable d&rsquo;apprendre les <a href=\"https:\/\/kinsta.com\/fr\/blog\/git-pour-developpement-web\/\" rel=\"noopener\">bases de Git<\/a> et de comprendre certaines commandes interm\u00e9diaires, telles que <code>git delete<\/code>, vous avez besoin de plus dans votre bo\u00eete \u00e0 outils pour g\u00e9rer les commandes avanc\u00e9es.<\/p>\n<p>Les conseils que nous partageons ici ne conviendront pas \u00e0 un d\u00e9butant en Git, donc si le <a href=\"https:\/\/kinsta.com\/fr\/blog\/controle-version-wordpress-git\/\" rel=\"noopener\">contr\u00f4le de version<\/a>, en g\u00e9n\u00e9ral, est nouveau pour vous, nous vous recommandons de passer un peu de temps \u00e0 utiliser les commandes de base sur une base quotidienne avant de chercher \u00e0 en ajouter d&rsquo;autres \u00e0 votre r\u00e9pertoire.<\/p>\n<p>En bref, voici une liste rapide des aspects que vous devez comprendre :<\/p>\n<ul>\n<li>Concepts de base de Git tels que les commits, les branches, les pull requests, etc.<\/li>\n<li>Familiarit\u00e9 avec les commandes de base de Git telles que <code>git add<\/code>, <code>git merge<\/code>, <code>git commit<\/code>, et <code>git push<\/code>.<\/li>\n<li>Pour les t\u00e2ches Git avanc\u00e9es, vous devez \u00eatre capable de <a href=\"https:\/\/kinsta.com\/fr\/blog\/commandes-linux\/\" rel=\"noopener\">naviguer dans un terminal<\/a>.<\/li>\n<\/ul>\n<p>Il est utile d&rsquo;avoir une exp\u00e9rience de travail avec Git dans un environnement d&rsquo;\u00e9quipe, car beaucoup de ces commandes peuvent avoir un impact significatif sur une base de code partag\u00e9e. Par exemple, il se peut que vous n&rsquo;utilisiez certaines de ces commandes que dans le cadre d&rsquo;un poste \u00e0 responsabilit\u00e9. Cela signifie que vous devez \u00eatre prudent et comprendre <em>quand<\/em> vous utilisez ces commandes.<\/p>\n<h2>Git avanc\u00e9 : 12 commandes puissantes \u00e0 conna\u00eetre<\/h2>\n<p>Dans la suite de cet article, nous allons aborder 12 commandes Git avanc\u00e9es qui vous permettront d&rsquo;aller au-del\u00e0 des bases et de vous transformer en magicien de Git. Commen\u00e7ons par une commande que vous utiliserez peut-\u00eatre plus que d&rsquo;autres.<\/p>\n<h3>1. Rebasing<\/h3>\n<p>Tout d&rsquo;abord, rebasing est une commande Git puissante qui est une alternative \u00e0 une pull request. Elle vous permet d&rsquo;int\u00e9grer tous les nouveaux commits que vous faites apr\u00e8s une divergence de branche dans une nouvelle branche et de placer les changements \u00e0 l&rsquo;extr\u00e9mit\u00e9 de la base. Ceci est utile si vous voulez incorporer des changements d&rsquo;une autre branche sans cr\u00e9er un commit de fusion pour quelque raison que ce soit.<\/p>\n<p>Un cas d&rsquo;utilisation courant du rebasing est lorsque vous travaillez sur une branche de fonctionnalit\u00e9s et que vous souhaitez incorporer des modifications de la branche principale sans cr\u00e9er de commit de fusion. Cela permet de garder l&rsquo;historique de votre projet propre, bien que l&rsquo;ex\u00e9cution soit plus longue et que vous puissiez voir plus d&rsquo;erreurs lors d&rsquo;une fusion.<\/p>\n<p>Pour rebaser une branche, utilisez la commande <code>git rebase<\/code>. Voici un exemple o\u00f9 nous rebasons une branche sur une autre :<\/p>\n<pre><code class=\"language-bash\">git checkout foo-branch\n\ngit rebase main\n<\/code><\/pre>\n<p>Vous pouvez \u00e9galement lister les commits que vous allez publier et vous donner la possibilit\u00e9 de les \u00e9diter \u00e0 l&rsquo;avance. Ainsi, vous pouvez \u00e9craser des commits, \u00e9diter des messages de commits, et plus encore. Vous pouvez utiliser les drapeaux <code>--interactive<\/code> ou <code>--i<\/code> pour effectuer un \u00ab rebasing interactif \u00bb.<\/p>\n<pre><code class=\"language-bash\">git rebase --interactive &lt;other-branch-name&gt;<\/code><\/pre>\n<p>En parlant de cela, l&rsquo;\u00e9crasement des commits en un seul pour mettre de l&rsquo;ordre dans l&rsquo;historique des livraisons est un cas d&rsquo;utilisation courant du rebasing. Cela peut rendre votre historique des livraisons plus facile \u00e0 lire et \u00e0 comprendre.<\/p>\n<p>Pour faire cela lors d&rsquo;un rebasing, vous devez suivre le drapeau avec le nombre de commits que vous souhaitez \u00e9craser, ce qui combinera les commits en un seul :<\/p>\n<pre><code class=\"language-bash\">git rebase -i HEAD~3\n<\/code><\/pre>\n<p>Cela ouvrira une fen\u00eatre interactive de rebase, semblable \u00e0 une fen\u00eatre de commit, o\u00f9 vous pourrez choisir et \u00e9diter les commits que vous souhaitez \u00e9craser :<\/p>\n<figure id=\"attachment_155613\" aria-describedby=\"caption-attachment-155613\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155613 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/git-rebase-terminal.png\" alt=\"Ex\u00e9cuter un git rebase dans le terminal.\" width=\"1000\" height=\"606\"><figcaption id=\"caption-attachment-155613\" class=\"wp-caption-text\">Ex\u00e9cuter un git rebase dans le terminal.<\/figcaption><\/figure>\n<p>Vous avez une liste de commits en haut de l&rsquo;\u00e9cran et une s\u00e9lection de commandes en bas, ainsi que d&rsquo;autres informations pertinentes. L&rsquo;option par d\u00e9faut est de <code>pick<\/code> un commit, ce qui le s\u00e9lectionne comme celui que vous voulez utiliser sans aucun changement.<\/p>\n<p>Cependant, il existe de <a href=\"https:\/\/git-scm.com\/docs\/git-rebase\" target=\"_blank\" rel=\"noopener noreferrer\">nombreuses autres commandes<\/a> pour vous aider \u00e0 naviguer dans un rebasing. Par exemple, vous pouvez reformuler un commit ou regrouper plusieurs commits. Pour effectuer des modifications et utiliser les commandes, vous travaillerez avec l&rsquo;\u00e9diteur de votre terminal. L&rsquo;\u00e9diteur par d\u00e9faut est souvent Vim, ce qui signifie que vous <a href=\"https:\/\/linuxhandbook.com\/basic-vim-commands\/\" target=\"_blank\" rel=\"noopener noreferrer\">devez conna\u00eetre cet \u00e9diteur<\/a>.<\/p>\n<p>L&rsquo;\u00e9tape finale consiste \u00e0 enregistrer vos modifications, puis \u00e0 les pousser vers la branche distante.<\/p>\n<h3>2. Reverting, Resetting et Unstaging<\/h3>\n<p>Git est r\u00e9put\u00e9 pour sa capacit\u00e9 \u00e0 annuler les modifications. C&rsquo;est un processus difficile en g\u00e9n\u00e9ral, avec un penchant pour les erreurs. Cependant, si vous apportez des modifications \u00e0 votre r\u00e9pertoire de travail ou \u00e0 votre zone de stockage et que vous souhaitez les annuler, il existe quelques commandes Git qui peuvent vous aider.<\/p>\n<p>En fait, Git vous donne des indications sur la mani\u00e8re d&rsquo;annuler un fichier si vous ex\u00e9cutez une commande <code>git status<\/code>:<\/p>\n<figure id=\"attachment_155614\" aria-describedby=\"caption-attachment-155614\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155614 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/git-status-guidance.png\" alt=\"Git vous montre comment d\u00e9piler un fichier lors de sa sortie d'\u00e9tat.\" width=\"1000\" height=\"435\"><figcaption id=\"caption-attachment-155614\" class=\"wp-caption-text\">Git vous montre comment d\u00e9piler un fichier lors de sa sortie d&rsquo;\u00e9tat.<\/figcaption><\/figure>\n<p>Ainsi, vous pouvez supprimer un commit de la branche courante et l&rsquo;envoyer ailleurs facilement :<\/p>\n<pre><code class=\"language-bash\">git reset HEAD &lt;commit&gt;\n<\/code><\/pre>\n<p>Cela a pour effet de faire reculer votre branche d&rsquo;un commit, comme si vous supprimiez le dernier commit connu. Vous pouvez m\u00eame avoir un cas d&rsquo;utilisation o\u00f9 vous voulez r\u00e9initialiser une branche \u00e0 son \u00e9tat d&rsquo;origine. Ici, vous pouvez r\u00e9initialiser par rapport \u00e0 l&rsquo;origine distante &#8211; en utilisant <code>git reset --hard origin\/main<\/code> par exemple. Cependant, notez que ces changements dispara\u00eetront \u00e0 jamais.<\/p>\n<p>Bien que la commande <code>git checkout<\/code> soit une commande que vous utiliserez souvent et qu&rsquo;elle soit consid\u00e9r\u00e9e comme basique, vous pouvez \u00e9galement l&rsquo;utiliser pour d\u00e9piler des fichiers avant un commit :<\/p>\n<pre><code class=\"language-bash\">git checkout -- &lt;filename&gt;\n<\/code><\/pre>\n<p>Notez l&rsquo;espace entre les tirets et l&rsquo;espace r\u00e9serv\u00e9 au nom de fichier. Ici, la commande d\u00e9stabilise le fichier que vous sp\u00e9cifiez et supprime les modifications du r\u00e9pertoire de travail. Notez que cette commande supprimera toutes les modifications locales que vous apportez \u00e0 un fichier. V\u00e9rifiez donc deux fois et trois fois que vous n&rsquo;avez pas besoin de ces modifications non sauvegard\u00e9es.<\/p>\n<p>Vous pouvez \u00e9galement utiliser <code>git revert<\/code> pour les modifications apport\u00e9es \u00e0 un commit. Cependant, cela n&rsquo;annule pas les modifications mais cr\u00e9e un nouveau commit bas\u00e9 sur l&rsquo;annulation des modifications dans le pr\u00e9c\u00e9dent.<\/p>\n<p>La principale diff\u00e9rence r\u00e9side dans le fait que la commande ne d\u00e9place aucun pointeur de r\u00e9f\u00e9rence vers le nouveau commit, mais conserve les anciens commits. Ceci est utile lorsque vous souhaitez annuler des modifications sans les supprimer de l&rsquo;historique des commits.<\/p>\n<p>La commande s&rsquo;attend \u00e0 recevoir une r\u00e9f\u00e9rence, et il est facile de revenir sur le dernier commit :<\/p>\n<pre><code class=\"language-bash\">git revert HEAD\n<\/code><\/pre>\n<p>Cependant, vous disposez d&rsquo;une plus grande marge de man\u0153uvre pour restaurer et modifier les fichiers et les commits. Les deux prochaines entr\u00e9es de cette liste de commandes Git avanc\u00e9es s&rsquo;y int\u00e9resseront.<\/p>\n<h3>3. Restaurer les fichiers dans leur \u00e9tat par d\u00e9faut<\/h3>\n<p>Avec Git, vous pouvez facilement restaurer un fichier \u00e0 son \u00e9tat par d\u00e9faut \u00e0 l&rsquo;aide d&rsquo;une commande relativement nouvelle : <code>git restore<\/code>. En fait, vous devriez consid\u00e9rer cette commande comme un remplacement de <code>git reset<\/code> dans la plupart des circonstances, car elle offre beaucoup plus de puissance sous le capot. Par exemple, vous pouvez obtenir le m\u00eame r\u00e9sultat avec <code>git restore --staged &lt;filename&gt;<\/code> qu&rsquo;avec <code>git reset HEAD<\/code>.<\/p>\n<p>La commande peut cependant faire plus : vous pouvez \u00e9galement restaurer les fichiers \u00e0 leur \u00e9tat par d\u00e9faut. Vous verrez comment proc\u00e9der si vous ex\u00e9cutez \u00e9galement <code>git status <\/code>:<\/p>\n<pre><code class=\"language-bash\">git restore &lt;filename&gt;\n<\/code><\/pre>\n<p>Cette commande supprimera les modifications du r\u00e9pertoire de travail comme si rien ne s&rsquo;\u00e9tait pass\u00e9. Comme pour <code>git checkout -- &lt;filename&gt;<\/code>, vous devez vous assurer que vous ne voulez pas des modifications locales, car elles dispara\u00eetront \u00e0 jamais.<\/p>\n<h3>4. Modifier les commits<\/h3>\n<p>Il y aura probablement de nombreuses fois o\u00f9 vous pousserez un commit et r\u00e9aliserez ensuite que vous avez oubli\u00e9 d&rsquo;inclure quelque chose d&rsquo;important. Avec Git, vous pouvez facilement modifier le commit pour inclure les changements manquants.<\/p>\n<p>Pour cela, vous devez suivre un processus sp\u00e9cifique :<\/p>\n<ul>\n<li>Tout d&rsquo;abord, effectuez vos modifications dans les fichiers dont vous avez besoin pour le projet.<\/li>\n<li>Mettez-les en staging comme d&rsquo;habitude en utilisant <code>git add<\/code>.<\/li>\n<li>Recommencez ces modifications dans la zone de staging en utilisant une commande diff\u00e9rente pour effectuer la validation :<\/li>\n<\/ul>\n<pre><code class=\"language-bash\">git commit --amend\n<\/code><\/pre>\n<p>Cela modifie le commit original avec le nouveau commit en utilisant votre zone de staging. Assurez-vous donc que vous n&rsquo;avez pas besoin de l&rsquo;ancienne version du commit, car elle sera perdue. Nous vous recommandons \u00e9galement d&rsquo;utiliser le drapeau <code>--amend<\/code> avec les commits locaux plut\u00f4t qu&rsquo;avec les commits distants, pour des raisons similaires \u00e0 celles que nous abordons dans cet article.<\/p>\n<p>Vous pouvez \u00e9galement utiliser <code>git commit --amend<\/code> pour \u00e9diter le message de commit uniquement avec la commande suivante :<\/p>\n<pre><code class=\"language-bash\">git commit --amend -m \"New commit message\"\n<\/code><\/pre>\n<h3>5. Journalisation de Git<\/h3>\n<p>L&rsquo;utilisation du journal de Git est utile pour vous aider \u00e0 comprendre l&rsquo;historique d&rsquo;un d\u00e9p\u00f4t. Cependant, nous ne classerions pas la commande <code>git log<\/code> comme avanc\u00e9e. Au lieu de cela, vous pouvez utiliser <a href=\"https:\/\/git-scm.com\/docs\/git-log\" target=\"_blank\" rel=\"noopener noreferrer\">diverses options<\/a> pour filtrer la sortie en fonction de vos besoins :<\/p>\n<pre><code class=\"language-bash\">git log\n\ngit log --decorate\n\ngit log --stat\n<\/code><\/pre>\n<p>Par exemple, d\u00e9corer une entr\u00e9e du journal affiche les noms de ref pour tous les commits affich\u00e9s. L&rsquo;option <code>--stat<\/code> affiche les insertions et les suppressions pour un commit :<\/p>\n<figure id=\"attachment_155612\" aria-describedby=\"caption-attachment-155612\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155612 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/git-log-stat.png\" alt=\"Ex\u00e9cutez la commande git log --stat dans le terminal.\" width=\"1000\" height=\"651\"><figcaption id=\"caption-attachment-155612\" class=\"wp-caption-text\">Ex\u00e9cutez la commande git log &#8211;stat dans le terminal.<\/figcaption><\/figure>\n<p>Vous pouvez \u00e9galement utiliser d&rsquo;autres options pour personnaliser la sortie du journal &#8211; appel\u00e9e \u00ab commit\u00a0 limiting \u00bb. Par exemple, prenez les commandes suivantes :<\/p>\n<pre><code class=\"language-bash\">git log --author=&lt;author-name&gt;\n\ngit log --grep=&lt;pattern-string&gt;\n<\/code><\/pre>\n<p>Ici, vous pouvez filtrer le journal en fonction de noms d&rsquo;auteurs sp\u00e9cifiques ou de mod\u00e8les de texte. En fait, vous pouvez combiner plusieurs options et drapeaux pour g\u00e9n\u00e9rer un journal dans un but pr\u00e9cis. Prenez par exemple la commande suivante :<\/p>\n<pre><code class=\"language-bash\">git log --oneline --author=&lt;author-name&gt; --since=&lt;date&gt; feature-temp\n<\/code><\/pre>\n<p>Cette commande recherche tous les commits de la branche <strong>feature-temp<\/strong> d&rsquo;un auteur unique depuis une date sp\u00e9cifi\u00e9e, puis l&rsquo;imprime en utilisant des entr\u00e9es sur une seule ligne. Notez que le param\u00e8tre <code>&lt;date&gt;<\/code> peut \u00e9galement \u00eatre une cha\u00eene de caract\u00e8res :<\/p>\n<pre><code class=\"language-bash\">--since=\u201dTwo weeks ago\u201d\n<\/code><\/pre>\n<p>De m\u00eame, si vous souhaitez rechercher un fichier sp\u00e9cifique au lieu d&rsquo;une branche, vous pouvez ex\u00e9cuter :<\/p>\n<pre><code class=\"language-bash\">git log --oneline --author=bartonfink --since=\u201d5 days ago\u201d -- readme.rm\n<\/code><\/pre>\n<p>Cette s\u00e9rie d&rsquo;exemples ne fait qu&rsquo;effleurer la surface de ce que vous pouvez faire avec vos journaux, mais il y a beaucoup de possibilit\u00e9s pour trouver des commits exacts dans ces journaux en fonction de vos crit\u00e8res de recherche.<\/p>\n<h3>6. Hooks Git<\/h3>\n<p>Vous utilisez probablement des macros et d&rsquo;autres scripts automatis\u00e9s pour vous aider \u00e0 ex\u00e9cuter du code. Git inclut \u00e9galement ce type de fonctionnalit\u00e9 sous la forme de hooks. Ces scripts s&rsquo;ex\u00e9cutent automatiquement en r\u00e9ponse \u00e0 certains \u00e9v\u00e9nements, tels que les commits ou les pushes. Il existe \u00e9galement de nombreuses fa\u00e7ons d&rsquo;utiliser les hooks pour renforcer le formatage du code, ex\u00e9cuter des tests, et bien d&rsquo;autres choses encore.<\/p>\n<p>Il existe deux types de hooks : c\u00f4t\u00e9 client et c\u00f4t\u00e9 serveur :<\/p>\n<ul>\n<li>Les hooks c\u00f4t\u00e9 client se d\u00e9clenchent en fonction des actions locales telles que les commits et les fusions.<\/li>\n<li>Les hooks c\u00f4t\u00e9 serveur se d\u00e9clenchent en raison d&rsquo;op\u00e9rations sur le r\u00e9seau. Cela peut \u00eatre le cas lorsqu&rsquo;un d\u00e9p\u00f4t re\u00e7oit un commit pouss\u00e9, parmi de nombreux autres exemples.<\/li>\n<\/ul>\n<p>Git remplira toujours votre d\u00e9p\u00f4t avec plusieurs exemples de hooks une fois que vous aurez lanc\u00e9 <code>git init<\/code>. Cependant, vous devez supprimer l&rsquo;extension <strong>.sample<\/strong> pour pouvoir les utiliser :<\/p>\n<figure id=\"attachment_155615\" aria-describedby=\"caption-attachment-155615\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155615 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/sample-hooks.png\" alt=\"Un dossier dans macOS montrant les exemples de hooks que Git installe lors de l'initiation.\" width=\"1000\" height=\"713\"><figcaption id=\"caption-attachment-155615\" class=\"wp-caption-text\">Un dossier dans macOS montrant les exemples de hooks que Git installe lors de l&rsquo;initiation.<\/figcaption><\/figure>\n<p>Notez que vous ne pouvez ex\u00e9cuter qu&rsquo;un seul type de hook \u00e0 la fois, bien qu&rsquo;il soit possible d&rsquo;utiliser plusieurs scripts \u00e0 la fois <a href=\"https:\/\/stackoverflow.com\/questions\/30104343\/multiple-git-hooks-for-the-same-trigger\" target=\"_blank\" rel=\"noopener noreferrer\">apr\u00e8s un certain travail<\/a>. Ainsi, les noms de vos fichiers doivent correspondre au type de hook que vous souhaitez utiliser en vous basant sur les exemples de scripts : <strong>pre-commit<\/strong>, <strong>update<\/strong>, et ainsi de suite.<\/p>\n<h4>Cr\u00e9er un hook Git<\/h4>\n<p>Pour cr\u00e9er un hook Git, vous devez cr\u00e9er un script ex\u00e9cutable dans le sous-r\u00e9pertoire <strong>.git\/hooks <\/strong>sans extension. Il s&rsquo;ex\u00e9cutera tant que vous l&rsquo;ajouterez au dossier <strong>hooks<\/strong>.<\/p>\n<p>Vous pouvez utiliser le langage de script de votre choix, \u00e0 condition qu&rsquo;il soit ex\u00e9cutable. Nous vous sugg\u00e9rons <a href=\"https:\/\/kinsta.com\/fr\/blog\/ruby-on-rails-vs-node-js\/\" rel=\"noopener\">Ruby<\/a> ou <a href=\"https:\/\/kinsta.com\/fr\/blog\/commandes-python\/\" rel=\"noopener\">Python<\/a>, mais vous pouvez utiliser <a href=\"https:\/\/kinsta.com\/fr\/blog\/langages-de-script\/\" rel=\"noopener\">Bash, Perl et bien d&rsquo;autres<\/a>. Tout ce que vous avez \u00e0 faire ici est de changer le chemin de votre interpr\u00e9teur par rapport au chemin par d\u00e9faut de Bash :<\/p>\n<pre><code class=\"language-bash\">#!\/usr\/bin\/env python\n<\/code><\/pre>\n<p>\u00c0 partir de l\u00e0, vous pouvez \u00e9crire votre code normalement. Par exemple, voici un script <code>prepare-commit<\/code> en Python qui invite l&rsquo;utilisateur \u00e0 \u00e9crire de bons messages de commit :<\/p>\n<pre><code class=\"language-python\">#!\/usr\/bin\/env python\n\nimport sys, os\n\npath_commit_msg = sys.argv[1]\n\nwith open(commit_msg_filepath, 'w') as f:\n\nf.write(\"# You\u2019ll need to provide a better commit message than that, buddy!\")\n<\/code><\/pre>\n<p>Bien que cela ne soit pas toujours n\u00e9cessaire, nous vous recommandons de lancer <code>chmod +x .git\/hooks\/&lt;hook-name&gt;<\/code> \u00e0 partir de la ligne de commande pour vous assurer que vous pouvez l&rsquo;ex\u00e9cuter.<\/p>\n<p>Dans l&rsquo;ensemble, les hooks peuvent \u00eatre un outil puissant pour automatiser les t\u00e2ches r\u00e9p\u00e9titives et renforcer les bonnes pratiques au sein de votre \u00e9quipe.<\/p>\n<h3>7. R\u00e9f\u00e9rences de commits<\/h3>\n<p>Dans Git, vous identifiez les commits par le <a href=\"https:\/\/kinsta.com\/fr\/blog\/generer-cles-ssh-github\/\" rel=\"noopener\">hash de cryptage<\/a> SHA-1. Bien qu&rsquo;il soit possible de se r\u00e9f\u00e9rer aux commits par leur hachage complet, cela peut \u00eatre fastidieux et source d&rsquo;erreurs :<\/p>\n<pre><code class=\"language-bash\">bc7623b7a94ed3d8feaffaf7580df3eca4f5f5ca\n<\/code><\/pre>\n<p>Au lieu de cela, Git propose plusieurs fa\u00e7ons de faire r\u00e9f\u00e9rence aux commits en utilisant des noms plus courts et plus faciles \u00e0 m\u00e9moriser. Par exemple, vous pouvez utiliser le nom d&rsquo;une branche ou d&rsquo;une balise. Prenons l&rsquo;exemple d&rsquo;une branche appel\u00e9e \u00ab develop \u00bb. Voici un exemple dans lequel nous faisons r\u00e9f\u00e9rence au dernier commit de cette branche :<\/p>\n<pre><code class=\"language-bash\">git diff develop..HEAD\n<\/code><\/pre>\n<p>Ceci montre les diff\u00e9rences entre le dernier commit (<code>HEAD<\/code>) sur la branche \u00ab develop \u00bb et le commit actuel.<\/p>\n<p>Vous pouvez \u00e9galement faire r\u00e9f\u00e9rence \u00e0 un commit en fonction de sa position relative dans l&rsquo;historique des commits. Par exemple, vous pouvez faire r\u00e9f\u00e9rence \u00e0 deux commits avant le commit actuel en utilisant l&rsquo;abr\u00e9viation <code>HEAD~2<\/code>:<\/p>\n<pre><code class=\"language-bash\">git diff HEAD~2..HEAD\n<\/code><\/pre>\n<p>Git propose \u00e9galement <a href=\"https:\/\/stackoverflow.com\/questions\/26785118\/head-vs-head-vs-head-also-known-as-tilde-vs-caret-vs-at-sign\" target=\"_blank\" rel=\"noopener noreferrer\">plusieurs autres fa\u00e7ons de faire<\/a> r\u00e9f\u00e9rence aux commits, comme l&rsquo;utilisation du symbole \u00ab @ \u00bb pour faire r\u00e9f\u00e9rence \u00e0 la branche actuelle ou l&rsquo;utilisation du symbole \u00ab ^ \u00bb pour faire r\u00e9f\u00e9rence au parent d&rsquo;une livraison. En utilisant ces abr\u00e9viations, vous pouvez gagner du temps et \u00e9viter les erreurs lorsque vous travaillez avec des commits.<\/p>\n<h3>8. Stashing<\/h3>\n<p>Dans des circonstances normales, vous penseriez qu&rsquo;il n&rsquo;y a aucun moyen de stocker les modifications que vous apportez aux fichiers sans les livrer. l&rsquo;archivage est le moyen de le faire de mani\u00e8re temporaire. C&rsquo;est utile lorsque vous avez besoin de changer de branche ou de travailler sur une t\u00e2che diff\u00e9rente, mais que vous ne voulez pas encore valider vos modifications.<\/p>\n<p>Par exemple, si vous avez besoin de changer de branche pour travailler sur quelque chose au milieu du flux, vous pouvez stocker les changements dans la branche actuelle et extraire l&rsquo;autre branche. \u00c0 partir de l\u00e0, vous pouvez travailler sur l&rsquo;autre branche, puis livrer et pousser ces changements. Vous pouvez ensuite extraire et r\u00e9cup\u00e9rer votre travail sur la branche d&rsquo;origine.<\/p>\n<p>Il existe deux fa\u00e7ons de conserver les modifications :<\/p>\n<pre><code class=\"language-bash\">git stash\n<\/code><\/pre>\n<p>Cette m\u00e9thode stocke vos modifications dans une nouvelle r\u00e9serve et ram\u00e8ne votre r\u00e9pertoire de travail \u00e0 la derni\u00e8re livraison <strong>HEAD<\/strong> (l&rsquo;\u00e9tat dans lequel vous l&rsquo;aviez avant d&rsquo;apporter de nouvelles modifications). Vous pouvez lister les modifications en utilisant <code>git stash list<\/code>, et inspecter la r\u00e9serve en utilisant <code>git stash show<\/code>. Cette derni\u00e8re commande peut \u00e9galement accepter n&rsquo;importe quel format accept\u00e9 par <code>git diff<\/code>.<\/p>\n<p>\u00c0 partir de l\u00e0, vous pouvez changer de branche ou travailler sur une autre t\u00e2che. Lorsque vous souhaitez r\u00e9cup\u00e9rer vos modifications, ex\u00e9cutez la commande suivante :<\/p>\n<pre><code class=\"language-bash\">git stash apply\n<\/code><\/pre>\n<p>Cette commande appliquera les derni\u00e8res modifications cach\u00e9es \u00e0 votre r\u00e9pertoire de travail. Notez toutefois que vous pouvez toujours rencontrer des conflits si vous modifiez trop le fichier. Apr\u00e8s tout, <code>git stash<\/code> est une solution temporaire au probl\u00e8me pos\u00e9.<\/p>\n<p>Vous pouvez \u00e9galement avoir plusieurs cachettes, et vous pouvez sp\u00e9cifier la cachette \u00e0 appliquer en utilisant ce qui suit :<\/p>\n<pre><code class=\"language-bash\">git stash apply stash@{n}\n<\/code><\/pre>\n<p>L&rsquo;espace r\u00e9serv\u00e9 <code>{n}<\/code> prend un nombre entier, et <code>stash@{0}<\/code> repr\u00e9sente la derni\u00e8re r\u00e9serve. La <a href=\"https:\/\/git-scm.com\/docs\/git-stash\" target=\"_blank\" rel=\"noopener noreferrer\">documentation officielle de Git<\/a> contient d&rsquo;autres exemples de <code>git stash<\/code>.<\/p>\n<h3>9. Bisecting<\/h3>\n<p>Nous parions que tout le monde a d\u00e9j\u00e0 rencontr\u00e9 un <a href=\"https:\/\/kinsta.com\/fr\/blog\/outils-revue-code\/\" rel=\"noopener\">bogue ou un probl\u00e8me<\/a> sans savoir o\u00f9 commencer \u00e0 chercher. Dans ce cas, la m\u00e9thode \u00ab bisecting \u00bb peut vous aider \u00e0 identifier rapidement le commit qui a introduit le probl\u00e8me.<\/p>\n<p>En bref, la commande chasse les bogues en effectuant une recherche dans vos commits. Une fois qu&rsquo;elle a trouv\u00e9 le commit incrimin\u00e9, elle vous le renvoie. La puissance de cette commande r\u00e9side dans toutes les sous-commandes que vous pouvez utiliser.<\/p>\n<p>Pour utiliser bisecting, vous devez d&rsquo;abord lancer la commande <code>git bisect start<\/code>. Git vous am\u00e8nera alors au premier commit de l&rsquo;historique de votre projet.<\/p>\n<p>A partir de l\u00e0, vous devez indiquer si ce commit est bon ou mauvais en utilisant les commandes appropri\u00e9es :<\/p>\n<pre><code class=\"language-bash\">git bisect good\n\ngit bisect bad\n<\/code><\/pre>\n<p>Git vous am\u00e8nera alors au commit suivant pour tester sa \u00ab qualit\u00e9 \u00bb Notez que vous pouvez \u00e9galement remplacer \u00ab good \u00bb par \u00ab old \u00bb et \u00ab bad \u00bb par \u00ab new \u00bb pour r\u00e9pondre \u00e0 votre cas d&rsquo;utilisation sp\u00e9cifique (bien que vous ne puissiez pas m\u00e9langer les termes)<\/p>\n<p>\u00c0 partir de l\u00e0, vous pouvez continuer \u00e0 marquer chaque commit comme bon ou mauvais jusqu&rsquo;\u00e0 ce que vous trouviez le commit qui a introduit le bogue. Cependant, vous n&rsquo;avez pas besoin de parcourir chaque commit &#8211; vous pouvez sp\u00e9cifier des identifiants exacts pour aider \u00e0 restreindre et \u00e0 raccourcir votre recherche :<\/p>\n<pre><code class=\"language-bash\">git bisect bad feature-test\n<\/code><\/pre>\n<p>Ici, il s&rsquo;agit d&rsquo;un nom de branche, mais il pourrait s&rsquo;agir d&rsquo;une r\u00e9vision sp\u00e9cifique utilisant un nombre entier, une r\u00e9f\u00e9rence de hachage, etc. Quoi qu&rsquo;il en soit, une fois que vous avez chass\u00e9 et trouv\u00e9 le bogue, vous pouvez ex\u00e9cuter l&rsquo;une des commandes suivantes pour revenir \u00e0 votre dernier code :<\/p>\n<pre><code class=\"language-bash\">git bisect reset\n<\/code><\/pre>\n<p>Comme pour toutes les commandes Git avanc\u00e9es de cette liste, il y a beaucoup plus \u00e0 assimiler, et la <a href=\"https:\/\/git-scm.com\/docs\/git-bisect\" target=\"_blank\" rel=\"noopener noreferrer\">documentation Git<\/a> sera une lecture essentielle ici.<\/p>\n<h3>10. Comparer les branches<\/h3>\n<p>Notre article sur les r\u00e9f\u00e9rences de commit parle de l&rsquo;utilisation de <code>git diff<\/code>. Il est maintenant temps de regarder cela plus en d\u00e9tail. Vous vous retrouverez souvent avec plusieurs branches qui contiennent des changements diff\u00e9rents. Git vous permet de comparer les diff\u00e9rences entre deux branches en utilisant la commande <code>git diff<\/code>. En fait, vous pouvez l&rsquo;utiliser de plusieurs mani\u00e8res, souvent en conjonction avec d&rsquo;autres commandes, pour investiguer et analyser un d\u00e9p\u00f4t.<\/p>\n<p>La commande de base <code>git diff<\/code> vous donnera une vue d&rsquo;ensemble des modifications. Cela ressemble beaucoup \u00e0 la sortie d&rsquo;une enqu\u00eate de fusion de commit :<\/p>\n<figure id=\"attachment_155611\" aria-describedby=\"caption-attachment-155611\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155611 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/git-diff-output.png\" alt=\"Affichage de la sortie d'une requ\u00eate git diff.\" width=\"1000\" height=\"540\"><figcaption id=\"caption-attachment-155611\" class=\"wp-caption-text\">Affichage de la sortie d&rsquo;une requ\u00eate git diff.<\/figcaption><\/figure>\n<p>Cependant, vous pouvez obtenir des branches exactes, des hachages, et plus encore. Par exemple, pour comparer deux branches, vous ex\u00e9cutez la commande <code>git diff branch1..branch2<\/code>, et remplacez les espaces r\u00e9serv\u00e9s :<\/p>\n<pre><code class=\"language-bash\">git diff feature-branch pre-prod\n<\/code><\/pre>\n<p>Vous pouvez \u00e9galement comparer les diff\u00e9rences entre votre branche actuelle et une autre branche :<\/p>\n<pre><code class=\"language-bash\">git diff HEAD..pre-prod\n<\/code><\/pre>\n<p>Notez que l&rsquo;utilisation de deux points ici renverra la diff\u00e9rence entre les deux extr\u00e9mit\u00e9s des branches. En revanche, l&rsquo;utilisation de trois points renverra la diff\u00e9rence entre l&rsquo;anc\u00eatre commun des deux branches et l&rsquo;utilisera pour tester.<\/p>\n<p>\u00c0 l&rsquo;instar de <code>git log<\/code>, vous pouvez nettoyer la sortie et affiner ce qu&rsquo;elle renvoie. Par exemple, <code>git diff --name-only branch1..branch2<\/code> ne v\u00e9rifiera que les fichiers qui diff\u00e8rent et laissera de c\u00f4t\u00e9 le contexte :<\/p>\n<figure id=\"attachment_155610\" aria-describedby=\"caption-attachment-155610\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155610 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/git-diff-name-only.png\" alt=\"Ex\u00e9cution d'une commande git diff --name-only dans le terminal.\" width=\"1000\" height=\"487\"><figcaption id=\"caption-attachment-155610\" class=\"wp-caption-text\">Ex\u00e9cution d&rsquo;une commande git diff &#8211;name-only dans le terminal.<\/figcaption><\/figure>\n<p>Vous pouvez trouver que la sortie est difficile \u00e0 analyser, surtout si le \u00ab diff \u00bb est long. Dans ce cas, vous pouvez utiliser l&rsquo;option <code>--color-words<\/code>:<\/p>\n<figure id=\"attachment_155609\" aria-describedby=\"caption-attachment-155609\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155609 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/git-diff-color-words.png\" alt=\"Ex\u00e9cutez la commande git diff --color-words et visualisez la sortie dans le terminal.\" width=\"1000\" height=\"636\"><figcaption id=\"caption-attachment-155609\" class=\"wp-caption-text\">Ex\u00e9cutez la commande git diff &#8211;color-words et visualisez la sortie dans le terminal.<\/figcaption><\/figure>\n<p>Dans l&rsquo;ensemble, <code>git diff<\/code> peut \u00eatre aussi puissant que d&rsquo;autres commandes, en particulier lorsque vous invoquez certaines options et que vous affinez les diff\u00e9rences que vous obtenez.<\/p>\n<h3>11. Appliquer des commits individuels<\/h3>\n<p>Il peut arriver que vous souhaitiez appliquer un commit sp\u00e9cifique d&rsquo;une branche \u00e0 une autre sans fusionner les deux branches. Git vous permet de le faire en utilisant <code>git cherry-pick<\/code>. Vous devez l&rsquo;utiliser avec pr\u00e9caution, mais vous pouvez trouver que <code>git cherry-pick<\/code> peut vous aider dans quelques sc\u00e9narios.<\/p>\n<p>Par exemple, si vous avez des branches de fonctionnalit\u00e9s p\u00e9rim\u00e9es que vous ne fusionnez pas dans <code>main<\/code> ou <code>trunk<\/code>, vous pouvez utiliser une combinaison de commandes (comme <code>git log<\/code>) pour extraire les anciens commits pertinents et les r\u00e9appliquer ailleurs.<\/p>\n<p>Utilisez git log pour trouver la r\u00e9f\u00e9rence d&rsquo;un commit. A partir de l\u00e0, assurez-vous que vous \u00eates sur la branche dont vous voulez extraire une r\u00e9f\u00e9rence. Par exemple, supposons que vous vouliez r\u00e9cup\u00e9rer le commit <code>xxxxxaaaaaa<\/code> dans la branche \u00ab <code>trunk<\/code> \u00bb. Tout d&rsquo;abord, v\u00e9rifiez votre branche&#8230;<\/p>\n<pre><code class=\"language-bash\">git checkout trunk\n<\/code><\/pre>\n<p>&#8230;puis faites un cherry-pick de votre commit :<\/p>\n<pre><code class=\"language-bash\">git cherry-pick xxxxxaaaaaa\n<\/code><\/pre>\n<p>Votre message de commit sera probablement p\u00e9rim\u00e9 \u00e0 de nombreuses occasions. Pour r\u00e9soudre ce probl\u00e8me, vous pouvez passer l&rsquo;option <code>--edit<\/code> \u00e0 la commande. Cela vous permettra de fournir un nouveau message de commit avant la s\u00e9lection.<\/p>\n<h3>12. La surcharge de &lsquo;git add&rsquo;<\/h3>\n<p>Pour notre derni\u00e8re commande avanc\u00e9e de Git, nous allons vous montrer <code>git add<\/code>. Non, ce n&rsquo;est pas une faute de frappe &#8211; cette commande fondamentale de Git poss\u00e8de une puissance surprenante sous son capot.<\/p>\n<p>Par exemple, si vous ajoutez des fichiers individuels \u00e0 la zone de stockage, vous pouvez utiliser la commande suivante :<\/p>\n<pre><code class=\"language-bash\">git add -p\n<\/code><\/pre>\n<p>L&rsquo;option <code>-p<\/code> vous permet d&rsquo;effectuer des modifications de mani\u00e8re interactive. Vous pouvez passer en revue les modifications apport\u00e9es \u00e0 chaque fichier, puis choisir ceux que vous souhaitez mettre en staging. Cela peut vous faire gagner beaucoup de temps et vous aider \u00e0 \u00e9viter de mettre en staging une modification non souhait\u00e9e.<\/p>\n<p>Vous savez peut-\u00eatre que vous pouvez mettre en staging des fichiers individuels, mais vous pouvez \u00e9galement sp\u00e9cifier un r\u00e9pertoire. Par exemple, pour mettre en staging tous les fichiers du r\u00e9pertoire \u00ab <code>new-feature<\/code> \u00bb :<\/p>\n<pre><code class=\"language-bash\">git add new-feature\n<\/code><\/pre>\n<p>Il se peut que vous souhaitiez voir le r\u00e9sultat d&rsquo;un site <code>git add<\/code> sans ex\u00e9cuter le processus dans son int\u00e9gralit\u00e9. Vous disposez d&rsquo;une option pour cela :<\/p>\n<pre><code class=\"language-bash\">git add --dry-run\n\ngit add -n\n<\/code><\/pre>\n<p>Lorsque vous ex\u00e9cutez cette commande, Git vous indiquera s&rsquo;il ajoutera ou ignorera les fichiers. En parlant de fichiers ignor\u00e9s, vous pouvez \u00e9galement les ajouter \u00e0 la zone de staging si vous le souhaitez :<\/p>\n<pre><code class=\"language-bash\">git add --force\n\ngit add -f\n<\/code><\/pre>\n<p>L&rsquo;ajout de fichiers \u00e0 la zone de staging peut \u00eatre plus complexe qu&rsquo;un simple sc\u00e9nario binaire \u00ab Ajouter ou ne pas ajouter \u00bb. Ainsi, l&rsquo;une des commandes les plus importantes de Git peut couvrir une myriade d&rsquo;\u00e9ventualit\u00e9s.<\/p>\n<h2>R\u00e9sum\u00e9<\/h2>\n<p>Une fois que vous avez les commandes de base de <a href=\"https:\/\/git-scm.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Git<\/a> dans votre poche, vous avez 80 % de ce dont vous avez besoin pour effectuer les t\u00e2ches r\u00e9guli\u00e8res de contr\u00f4le de version de votre projet. Cependant, c&rsquo;est dans les 20 % restants que les commandes avanc\u00e9es de Git peuvent briller.<\/p>\n<p>Des commandes et des techniques telles que le rebasing, la bissection, la restauration de fichiers et bien d&rsquo;autres encore vous permettront de vous sortir rapidement d&rsquo;un mauvais pas. De plus, vous pouvez offrir une plus grande valeur \u00e0 votre \u00e9quipe et \u00e0 votre projet, et vous pouvez aider \u00e0 rationaliser les flux de travail, \u00e0 augmenter la productivit\u00e9 et \u00e0 avoir un effet global plus important en tant que d\u00e9veloppeur.<\/p>\n<p>L&rsquo;une de ces commandes Git avanc\u00e9es fera-t-elle partie de votre travail quotidien ? Faites-nous en part dans la section des commentaires ci-dessous !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Git est un outil puissant pour le contr\u00f4le de version et poss\u00e8de une sorte de monopole dans ce domaine. Pour la plupart des t\u00e2ches quotidiennes, Git &#8230;<\/p>\n","protected":false},"author":199,"featured_media":70444,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[971],"class_list":["post-70443","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-git"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Git avanc\u00e9 : Les commandes puissantes au-del\u00e0 des bases - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Git peut \u00eatre simple \u00e0 utiliser, mais c&#039;est un syst\u00e8me de contr\u00f4le de version complexe. Cet article pr\u00e9sente quelques commandes Git avanc\u00e9es pour les utilisateurs chevronn\u00e9s !\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/fr\/blog\/git-avance\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Git avanc\u00e9 : Des commandes puissantes au-del\u00e0 des bases\" \/>\n<meta property=\"og:description\" content=\"Git peut \u00eatre simple \u00e0 utiliser, mais c&#039;est un syst\u00e8me de contr\u00f4le de version complexe. Cet article pr\u00e9sente quelques commandes Git avanc\u00e9es pour les utilisateurs chevronn\u00e9s !\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/fr\/blog\/git-avance\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstafrance\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-06-26T16:32:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-22T11:06:46+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/06\/advanced-git.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jeremy Holcombe\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Git peut \u00eatre simple \u00e0 utiliser, mais c&#039;est un syst\u00e8me de contr\u00f4le de version complexe. Cet article pr\u00e9sente quelques commandes Git avanc\u00e9es pour les utilisateurs chevronn\u00e9s !\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/06\/advanced-git.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@kinsta_fr\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_fr\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeremy Holcombe\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/git-avance\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/git-avance\/\"},\"author\":{\"name\":\"Jeremy Holcombe\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\"},\"headline\":\"Git avanc\u00e9 : Des commandes puissantes au-del\u00e0 des bases\",\"datePublished\":\"2023-06-26T16:32:30+00:00\",\"dateModified\":\"2023-08-22T11:06:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/git-avance\/\"},\"wordCount\":4109,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/git-avance\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/06\/advanced-git.jpg\",\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/git-avance\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/git-avance\/\",\"url\":\"https:\/\/kinsta.com\/fr\/blog\/git-avance\/\",\"name\":\"Git avanc\u00e9 : Les commandes puissantes au-del\u00e0 des bases - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/git-avance\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/git-avance\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/06\/advanced-git.jpg\",\"datePublished\":\"2023-06-26T16:32:30+00:00\",\"dateModified\":\"2023-08-22T11:06:46+00:00\",\"description\":\"Git peut \u00eatre simple \u00e0 utiliser, mais c'est un syst\u00e8me de contr\u00f4le de version complexe. Cet article pr\u00e9sente quelques commandes Git avanc\u00e9es pour les utilisateurs chevronn\u00e9s !\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/git-avance\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/git-avance\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/git-avance\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/06\/advanced-git.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/06\/advanced-git.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/git-avance\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Git\",\"item\":\"https:\/\/kinsta.com\/fr\/sujets\/git\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Git avanc\u00e9 : Des commandes puissantes au-del\u00e0 des bases\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/fr\/#website\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/fr\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstafrance\/\",\"https:\/\/x.com\/kinsta_fr\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\",\"name\":\"Jeremy Holcombe\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"caption\":\"Jeremy Holcombe\"},\"description\":\"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/jeremyholcombe\/\"],\"url\":\"https:\/\/kinsta.com\/fr\/blog\/author\/jeremyholcombe\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Git avanc\u00e9 : Les commandes puissantes au-del\u00e0 des bases - Kinsta\u00ae","description":"Git peut \u00eatre simple \u00e0 utiliser, mais c'est un syst\u00e8me de contr\u00f4le de version complexe. Cet article pr\u00e9sente quelques commandes Git avanc\u00e9es pour les utilisateurs chevronn\u00e9s !","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/fr\/blog\/git-avance\/","og_locale":"fr_FR","og_type":"article","og_title":"Git avanc\u00e9 : Des commandes puissantes au-del\u00e0 des bases","og_description":"Git peut \u00eatre simple \u00e0 utiliser, mais c'est un syst\u00e8me de contr\u00f4le de version complexe. Cet article pr\u00e9sente quelques commandes Git avanc\u00e9es pour les utilisateurs chevronn\u00e9s !","og_url":"https:\/\/kinsta.com\/fr\/blog\/git-avance\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstafrance\/","article_published_time":"2023-06-26T16:32:30+00:00","article_modified_time":"2023-08-22T11:06:46+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/06\/advanced-git.jpg","type":"image\/jpeg"}],"author":"Jeremy Holcombe","twitter_card":"summary_large_image","twitter_description":"Git peut \u00eatre simple \u00e0 utiliser, mais c'est un syst\u00e8me de contr\u00f4le de version complexe. Cet article pr\u00e9sente quelques commandes Git avanc\u00e9es pour les utilisateurs chevronn\u00e9s !","twitter_image":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/06\/advanced-git.jpg","twitter_creator":"@kinsta_fr","twitter_site":"@kinsta_fr","twitter_misc":{"\u00c9crit par":"Jeremy Holcombe","Dur\u00e9e de lecture estim\u00e9e":"19 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/fr\/blog\/git-avance\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/blog\/git-avance\/"},"author":{"name":"Jeremy Holcombe","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21"},"headline":"Git avanc\u00e9 : Des commandes puissantes au-del\u00e0 des bases","datePublished":"2023-06-26T16:32:30+00:00","dateModified":"2023-08-22T11:06:46+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/git-avance\/"},"wordCount":4109,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/git-avance\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/06\/advanced-git.jpg","inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/fr\/blog\/git-avance\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/fr\/blog\/git-avance\/","url":"https:\/\/kinsta.com\/fr\/blog\/git-avance\/","name":"Git avanc\u00e9 : Les commandes puissantes au-del\u00e0 des bases - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/git-avance\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/git-avance\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/06\/advanced-git.jpg","datePublished":"2023-06-26T16:32:30+00:00","dateModified":"2023-08-22T11:06:46+00:00","description":"Git peut \u00eatre simple \u00e0 utiliser, mais c'est un syst\u00e8me de contr\u00f4le de version complexe. Cet article pr\u00e9sente quelques commandes Git avanc\u00e9es pour les utilisateurs chevronn\u00e9s !","breadcrumb":{"@id":"https:\/\/kinsta.com\/fr\/blog\/git-avance\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/fr\/blog\/git-avance\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/blog\/git-avance\/#primaryimage","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/06\/advanced-git.jpg","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/06\/advanced-git.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/fr\/blog\/git-avance\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Git","item":"https:\/\/kinsta.com\/fr\/sujets\/git\/"},{"@type":"ListItem","position":3,"name":"Git avanc\u00e9 : Des commandes puissantes au-del\u00e0 des bases"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/fr\/#website","url":"https:\/\/kinsta.com\/fr\/","name":"Kinsta\u00ae","description":"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es","publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/fr\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstafrance\/","https:\/\/x.com\/kinsta_fr","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21","name":"Jeremy Holcombe","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","caption":"Jeremy Holcombe"},"description":"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.","sameAs":["https:\/\/www.linkedin.com\/in\/jeremyholcombe\/"],"url":"https:\/\/kinsta.com\/fr\/blog\/author\/jeremyholcombe\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/70443","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/users\/199"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/comments?post=70443"}],"version-history":[{"count":6,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/70443\/revisions"}],"predecessor-version":[{"id":70467,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/70443\/revisions\/70467"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/70443\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/70443\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/70443\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/70443\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/70443\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/70443\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/70443\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/70443\/translations\/es"},{"href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/70443\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media\/70444"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media?parent=70443"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/tags?post=70443"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/topic?post=70443"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}