Tutoriel Git avancé

Le déploiement de votre projet via un référentiel distant vous permet de gérer chaque partie de manière flexible. Les corrections de bugs, les mises à jour de fonctionnalités, la suppression de fichiers, le travail d'équipe, les contributions open source, le déploiement de code et bien plus sont désormais à portée de main avec une solide connaissance de Git.

Alors, vous utilisez Git mais vous voulez en savoir plus ? Voici quelques astuces Git plus avancées qui faciliteront le contrôle de version de votre projet.

Branche Git

Une branche Git vous empêche de pousser directement vers la branche master. C'est utile si vous gérez un projet avec une équipe de développeurs. Vous pouvez créer autant de branches Git que vous le souhaitez, puis les fusionner ultérieurement avec la branche master.

Créer une branche Git

Pour créer une branche Git, utilisez :

 git branch branch_name

Basculer vers une branche Git

Utilisez le checkout pour basculer vers une branche Git :

 git checkout branch_name

Après avoir basculé vers une branche, vous pouvez organiser vos modifications à l'aide de git add –all . Puis validez-les à l'aide de la commande git commit -m "commit name" .

Comparer une succursale avec un maître

Utilisez la commande git diff :

 git diff master..branch_name

Pour comparer des fichiers spécifiques :

 git diff master..testb -- main.html

Comparer deux branches est similaire à la façon dont vous comparez une branche avec le maître :

 git diff branch1..branch2

Pour voir les différences dans un fichier spécifique entre deux branches :

 git diff branch1..branch2 -- main.html

Pousser les modifications vers une succursale distante

Vous voudrez peut-être qu'un autre développeur examine les modifications que vous avez apportées à un fichier dans votre branche locale avant de les diffuser en direct. Une bonne pratique consiste à pousser votre branche Git locale vers une réplique distante afin qu'elle puisse y jeter un œil.

Supposons que vous ayez précédemment créé une branche locale nommée changes . Vous pouvez basculer vers cette branche locale, ajuster tous les fichiers que vous voulez, puis les mettre en scène et les valider dans cette branche.

Vous pouvez ensuite transmettre ces modifications à la version distante de la branche :

 git push origin changes

Fusionner la branche distante avec le maître à l'aide d'une demande de tirage

Un autre programmeur a donc audité les changements dans la branche distante ( changements ). Mais vous voulez le fusionner avec la branche master et le pousser en direct.

N'oubliez pas que votre branche distante hérite du nom de votre branche Git locale ( changes ). Voici comment fusionner les modifications :

Basculez vers la branche master :

 git checkout master

Tirez l'origine ou HEAD de la branche ( changements ) pour la fusionner avec la branche master :

 git pull origin changes

Poussez cette fusion en direct vers la branche master :

 git push origin master

Utilisez plutôt Git Merge

Pour fusionner une branche avec le maître à l'aide de la commande merge :

Migrer vers la branche master :

 git checkout master

Fusionnez-le avec la branche ( changements ):

 git merge changes

Puis poussez la fusion en direct vers la branche master :

 git push origin master

Assurez-vous de remplacer les modifications par le nom de votre succursale.

Une fois la fusion réussie, vous pouvez alors supprimer la branche localement et à distance si vous n'en avez plus besoin :

Connexes : Comment renommer une branche dans Git

Git Rebase

Si vous avez plusieurs branches avec des commits obsolètes, vous pouvez rebaser ou recentrer la tête/les références de ces branches pour hériter de la tête/des références d'une mise à jour.

Le rebasage est donc pratique lorsque vous devez mettre à jour certaines branches avec la base d'une branche actuelle.

Cependant, le rebasage ne devrait pas être une action fréquente, surtout si vous travaillez avec une équipe, car cela peut perturber l'ensemble du flux de travail. Mais si vous travaillez seul et que vous êtes familier avec votre workflow et vos branches, le rebasage ne devrait pas faire de ravages si vous savez où et comment l'utiliser.

Par exemple, supposons que vous ayez deux branches ; branche1 et branche2. Maintenant, vous n'avez apporté aucune modification à branch1 depuis un certain temps. Mais vous validez systématiquement les modifications apportées à la branche2, y compris récemment.

Vous avez donc décidé de transporter branch1 avec le flux. Rebaser branch1 sur branch2, par conséquent, signifie que vous dites à branch1 d'ignorer ses commits précédents et d'hériter du commit récent effectué sur branch2.

Voici comment procéder :

Basculer vers la branche abandonnée (branche1) :

 git checkout branch1

Rebase ensuite branch1 sur branch2 mis à jour :

 git rebase branch2

Courge Git

Git squash vous permet de fusionner plusieurs commits en un seul. Cela aide lorsque vous exécutez git commit plusieurs fois sur une seule mise à jour. Un exemple pratique est lorsque chaque correction de bogue ou refactorisation de code pour une seule fonctionnalité a un commit séparé.

Mais vous ne voudrez peut-être pas pousser le commit HEAD avec ceux qui l'accompagnent car ils ont tous le même objectif. Une approche recommandée consiste à les regrouper en un seul pour éviter toute confusion lors du suivi des commits.

La meilleure façon d'écraser les commits est via le mode de rebase interactif. Jetez un œil à l'exemple ci-dessous pour mieux comprendre cela.

Dans cet exemple, supposons que vous ayez cinq corrections de bogues. Et il y a un commit pour chacun d'eux. Voici comment regrouper ces cinq commits en un seul :

Exécutez git reflog pour afficher le code de hachage de vos commits :

 git reflog

Voici le résultat dans ce cas :

Maintenant, votre objectif est d'écraser les cinq derniers commits, en commençant par le premier correctif jusqu'au cinquième correctif .

Pour ce faire, copiez le code de hachage du commit juste en dessous du premier correctif ( 0a83962 ). Appuyez ensuite sur Q pour quitter le reflog .

Maintenant, lancez git rebase –interactive sur ce hachage.

 git rebase --interactive 0a83962

Git ouvre alors un fichier de rebase interactif qui ressemble à ceci :

Pour écraser les commits, à l'exception du premier correctif , remplacez pick par s pour chacun des autres commits :

Enregistrez et fermez ce fichier.

Un autre fichier s'ouvre alors pour vous permettre de renommer le commit écrasé :

Nettoyez-les et saisissez un nom préféré pour le commit écrasé :

Enregistrez ce fichier. Fermez-le ensuite et vous devriez recevoir un message de réussite dans votre terminal.

Remarque : Le fichier interactif peut s'ouvrir dans le terminal. Mais si vous êtes sous Windows, vous voudrez peut-être forcer votre terminal à ouvrir globalement les fichiers dans votre éditeur de texte préféré pour faciliter l'écrasement.

Pour ce faire, ouvrez votre ligne de commande et exécutez :

 git config --global core.editor "'path to choice text editor' -n -w"

Git Fork contre Git Clone

Le fork et le clonage sont deux termes différents dans Git. Vous ne pouvez pas forker votre référentiel car il est déjà là avec vous. Vous pouvez, cependant, dupliquer le référentiel d'autres personnes et le cloner par la suite.

Forker un référentiel signifie que vous récupérez une copie du référentiel de quelqu'un et que vous en faites le vôtre. Une fois que vous avez obtenu une copie de ce référentiel, vous pouvez le cloner comme vous le feriez pour n'importe lequel de vos référentiels git pour les modifications locales.

Voici comment cloner un référentiel distant sur GitHub et lancer un téléchargement dans votre répertoire local :

 git clone https://github.com/username/repository_name.git/

Restaurer un fichier à son état par défaut

Si vous souhaitez effacer les modifications dans un fichier après le dernier commit, vous pouvez utiliser la commande git restore :

 git restore filename

Modifier un commit

Vous pouvez revenir à un commit précédent si vous oubliez d'apporter des modifications à certains fichiers lors de leur transfert.

Apportez des modifications au fichier que vous avez oublié. Ensuite, utilisez git amend pour revoir un commit :

 git add file_forgotten
git commit --amend

Désactiver les fichiers

Vous pouvez supprimer des fichiers spécifiques que vous avez mis en scène pour un commit à l'aide de la commande git rm :

 git rm --cached filename

Vous pouvez également supprimer plusieurs fichiers à la fois :

 git rm --cached file1 file2 file3 file4

N'oubliez pas d'ajouter l'extension de fichier appropriée à tout fichier que vous exemptez. Par exemple, un fichier texte brut doit être filename.txt .

Connexe : Comment nettoyer Git et supprimer les fichiers non suivis

Réinitialiser Git

L'utilisation de git reset est utile si vous souhaitez supprimer tous les fichiers que vous avez mis en scène pour un commit à la fois :

 git reset

Git reset HEAD, cependant, pointe le HEAD d'une branche vers un commit spécifique dans votre arbre de travail. Par exemple, si vous n'avez pas encore poussé votre commit actuel, vous pouvez revenir au commit récemment poussé :

 git reset --soft HEAD~1

Remplacez –soft par –hard si vous avez déjà poussé le commit actuel :

 git reset --hard HEAD~1

Git Revenir

Contrairement à la commande reset , git revert maintient l'intégrité de votre historique de commit. C'est pratique si vous souhaitez modifier un commit en raison d'erreurs ou de bogues.

Il n'abandonne pas le commit cible ni n'en crée un nouveau. Au lieu de cela, il revient aux modifications récentes que vous avez apportées sans supprimer ou renommer un tel commit. C'est un excellent moyen de garder vos commits plus propres, et c'est plus sûr que de réinitialiser tout le temps.

Pour revenir à un commit :

 git revert HEAD~1

HEAD~1 pointe vers un commit spécifique dans votre arbre de travail.

Supprimer un fichier suivi ou un répertoire

Vous pouvez utiliser git rm -f pour supprimer tous les fichiers suivis dans votre arbre de travail. Notez, cependant, que Git ne peut pas supprimer les fichiers non suivis, car il ne les met pas en cache.

Pour supprimer un fichier intermédiaire :

 git rm -f filename

Pour supprimer un dossier intermédiaire :

 git rm -r -f foldername

Journalisation Git

Pour afficher vos journaux de commit et votre historique dans Git :

 git log

Pour enregistrer les activités dans une branche spécifique :

 git log branch_name

En relation: Comment inspecter l'historique d'un projet avec git log

Parfois, vous voudrez peut-être revenir à un commit abandonné. Donc pour voir les commits abandonnés, y compris ceux qui sont pertinents :

 git reflog

Pour afficher les journaux de référence pour une branche particulière :

 git reflog branch_name

Gérez vos versions de projet comme un pro avec Git

Avec Git offrant de nombreux avantages, vous pouvez gérer vos versions de projet à distance sans cambrioler des fichiers et des dossiers sur site dans votre branche principale. De plus, il vous permet d'exécuter facilement des projets avec une équipe.

Comme vous l'avez vu, Git possède de nombreuses fonctionnalités que vous pouvez explorer. Mais attention à utiliser ces fonctionnalités à bon escient. Sinon, vous pourriez finir par casser des choses. Cela dit, vous pouvez toujours créer un référentiel distant de démonstration et jouer avec ces fonctionnalités.