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 :
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 .
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
Où 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
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.