Git && github
1. Create Github Repository And Clone It
Git: un système de versionning
Github : un repository distant vers lequel on envoie le code, il existe d’autre (gitlab,
bitbuket…)
- Créer un dossier dans github, ensuite copier le lien http et lancer la commande clone :
Git clone [Link]
2. Add and Reset and Commit & Explain Progress
Git status / git status -s:
Affiche l’état courant et liste tous les nouveaux fichiers et les fichiers modifiés à commiter
Git diff --staged / git difftool –staged (to use a visuel tool selon le choix)
- Plus spécifique que git status qui affiche les fichiers affecté (indexé dans le staging
area), git diff --staged affiche les lignes exacte qui sont affectées (qui sont indexés
dans le staging area) et qui sont indexé et prêt à être commiter.
- Cette commande est utiliser pour un review et comparaison entre les anciennes copies
des fichiers commiter déjà et les nouvelles copies de ces fichiers indexéé dans le
staging area si on a pas un accès à un visuel tool(la bonnes pratique est d’utiliser un
outil visuel)
- Comparing what we have in the last commit with what we have in the staging area
Git diff / git difftool (to use a visuel tool selon le choix)
- Comparing what we have in the working directory with what we have in the staging
area
- mettre vscode as default tools to compare files
- git config --global [Link] vscode
- git config --global [Link] "code --wait --diff $LOCAL $REMOTE"
- git config –global –edit : pour ouvrir le fichier de config avec l editeur et vérifier les
config de vscode as a visual tool
git add [fichier]
Ajoute un instantané du fichier, c.à.d ajoute les fichier et dossier au staging area
git add [Link] : ajoute le fichier [Link]
git add –all ou git add * : ajoute toutes les fichiers et dossier
git reset head [fichier]
rénitialiser le fichier, et l’enlever de staging area : c.à.d faire
un unstage
git reset head [Link]
git commit –m ’’ message descriptif ‘’
Enregistre des instantanés de fichiers de façon permanente dans l’historique des versions.
La commande git commit permet de valider les modifications apportées au HEAD. Notez que tout
commit ne se fera pas dans le dépôt distant.
Git show idcommit
-Affiche ce qu’on a fait dans un commit en détails
- On peut afficher des objets (commit, blob (for file), tree (fir directory), tags)
3. Push Local Changes To Remote Repository
git branch
Liste toutes les branches locales dans le dépôt courant
git remote -v
Afficher le repôt distant
git push origin main
Envoie tous les commits de la branche locale vers GitHub
4 Pull Changes From Remote Repository
Pour récupérer toutes les modifications présentes sur le dépôt distant dans le répertoire de
travail local, la commande pull est utilisée, il faut récupérer toutes es modification en repot
distant en local ensuite ajouter nos propres modifications
git pull origin
git pull fait deux choses : get fecth pour récupérer les fichier en repo diastant vers le repo
local et git merge pour fusionner les modif en repos distant avec le repos local.
5 Git Configurations
git config –l
Commande qui liste les configurations existantes
git config [--local –global --system] key value
--local: s’applique sur le repo actuel seulement
--global : s’applique sur tous les repos d’un user
--system : s’applique sur tous les repos de tous les users
git config --global [Link] rouissi Mohamed ahmed
git config --global [Link] mohamedahmedrouissi@[Link]
git config --global [Link] true
git config --get [Link] / git config --get [Link]
Afficher la valeur de key demander
mettre vscode as default tools to compare files
git config --global [Link] vscode
git config --global [Link] "code --wait --diff $LOCAL $REMOTE"
git config –global –edit : pour ouvrir le fichier de config avec l editeur
git config –help / git config –h
git ls : lister les fichier
git ls-files : afficher les fichier dans le staging area
git touch [Link] : créer un fichier
git echo hello > [Link] : écraser le contenue du [Link] et ecrire hello si le fichier existe si non créé le
fichier
git echo ‘’hello world’’ >> [Link] : : append (ajouter) hello world au fichier [Link] s’il existe si non
[Link] sera créer
rm [Link] / git add [Link]: si on efface un fichier de repo local, il reste dans le staging area (vérifier
avec git ls-files), il faut faire un add pour que ce fichier soit supprimer du staging area
git rm –cached [Link] : pour supprimer le fichier du l’index seuelement (staging area)
git rm [Link] : pour supprimer le fichier du repo local (workong directry) et staging area
mv [Link] [Link] / git add [Link] [Link]: si on renomme un fichier de repo local, il reste dans
le staging area avec l’ancien nom (vérifier avec git ls-fils), il faut faire un add pour que ce fichier
soit supprimer du staging area
git mv [Link] [Link] : pour renommer le fichier du repo local (workong directry) et staging area
6 Generate And Test Github Public Key
Lorsque je veux faire un clone ou remote, on utilize soit un lien http ou bien ssh
- Pour utiliser ssh, on doit procéder comme suit :
1- Générer key public en local avec cmder
ssh-keygen -t rsa
2- Entrer le password
3- Afficher le key pour le copier
cat C:\Users\DELL/.ssh/id_rsa.pub
4- Dans settings ssh and gpg jey cliquer sur ajouter un ssh key, puis entrer le titre
pour le key et coller le key et l’ajouter.
5- Entre la commande suivante
ssh -T git@[Link]
6- Le mot de passe entrer lors de la création du key sera demander
7- Si tous va bien un hi rouissi sera afficher
7 Create Repository From Existing Project
Dans ce cas, on va créer un repos distant à partir un repo en local.
1- Créer le repos en local
mkdir repofromlocal
2- Initialiser le repos en local
cd repofromlocal / git init
la commande git init , initialise le repos, c.à.d dès maintenant on peut appliquer les
commande git sur notre repos (un repot caché nommé .git est créer)
3- Créer qlq fichiers et faire une commit
touch [Link] [Link]
git add –all
git commit -m "1-31/01/2022 first commit"
4- Créer un nouveau repository sur github nommé “testforcourse”
5- Remote
git remote add origin git@[Link]:rouissimed/[Link]
git branch -M main
git push -u origin main ici le mot de passé de key sera demander
8 Learn Pull Request With Real Examples
- Après que j’ai fait des modifications sur mon projet dans le local, je dois informer les admin du repos
distant que j’ai des modifications à publier sur le repos distant, cela se fait avec un pull request.
9 Learn Everything About Aliases
- Les alias sont utilisé pour faire des raccourcie pour les commandes long par exp
- Dans cet exemple, on va faire un alias pour la commande git status, pour utiliser git st
- git config --global [Link] status
10 Learn Git & GitHub #12 - Learn About Branching
And Merging
Git branch
Liste toutes les branches du repos local
Git branch newbranche
Créer une nouvelle branche nommé newbranche
Git checkout newbranche
Basculer vers la nouvelle branche
git checkout -b newbranch
Créer une nouvelle branche nommé newbranch et bascule vers newbranche directement
Git branch –d newbranche
Supprimé la branche nommé newbranche, après une vérification d’existance d’un merge si non s’il
trouve des modif la srppression n’aura pas lieu
Git branch –D newbranche
Forcer la suppression de la branche nommé newbranche
Pour tester le merge avec la branche main en local, ensuite push vers github
1- Créer une nouvelle branche et basculer vers cet derniere
git checkout -b newbranch
2- Faire des modif (créer file, add , commit)
Touch [Link] / git add [Link] / git commit –m ’’ descrption ’’
3- Basculer vers la branche main
git checkout main
4- Faire le merge : git merge newbranch
5- Faire le push vers github : git push origin main
Pour tester le merge avec la branche main dans github directement
1- Créer une nouvelle branche et basculer vers cet derniere
git checkout -b nouvelbranche
2- Faire des modif (créer file, add , commit)
Touch [Link] / git add [Link] / git commit –m ’’ descrption ’’
3- Rester dans la nouvelle branche
4- Faire le push vers github :
git push origin nouvelbranche
5- Aller eu remote repo github pour valider le pullrequest ou bien la refuser
Ce push à partir de la nouvelle à créer un pullrequest for 'nouvelbranche' on GitHub
- Nous avons 4 types de merge
1- Fast forwarding
o Lorsque nous avons des commit linéaires
2- Merge commit
o Lorsque nous avons des commit dérivés des branches différents, dans ce cas il faut
créer un autre commit
3- Rebase
o Rewrite history
o Caution : never rewrite history that has been shared with other
o Rebase est le faite de changer le parent d’un commit
o Avec rebase on peut récupérer un fichier créé dans la branche main dans une
branche test par exp
4- Squash
11 Mastering Stash
- Mettre en suspens des modifications non finies pour y revenir plus tard
- git stash stocke (ou stashe) temporairement les changements apportés à votre copie de travail
pour que vous puissiez effectuer d'autres tâches, puis revenir et les réappliquer par la suite. Le
stashing est pratique si vous avez besoin de changer rapidement de contexte et de travailler
sur autre chose, mais que vous êtes en plein dans un changement de code et que n'êtes pas
tout à fait prêt à commiter.
- L’une des moins connues, git stash aide à enregistrer les changements qui ne doivent pas
être commit immédiatement. C’est un commit temporaire. Usage:
- git stash
- Enregistre de manière temporaire tous les fichiers
- Rq si on fait un ls après git stash, les les fichiers staché ne seron pas affiché mais il sont
toujours enregistrer.
- git stash save ‘’ description du stash ’’
- Enregistre de manière temporaire tous les fichiers et personnalise le message
- git stash pop
- Réappliquer les changements stashés au préalable et supprime le stash
- git stash pop réapplique toujours le dernier stash (enregistrement) si on a créer
+ieurs stash
- Pour cibler un stash bien déterminer, on doit indiquer sont id
- git stash pop stash@{2}
- on peut avoir l’id avec la commande git stash list
- git stash list
- Liste toutes les stash
- git stash apply
- git stash apply stash@{2}
- Réappliquer les changements stashés au préalable et supprime le stash
- git stash drop : supprime le dernier stash
- git stash drop stash@{2}: supprime le stash num 2
- git stash clear : supprime toutes les stash
- git stash show
- git stash show stash@{2}
- afficher le contenue d’un stash
12Corrigez vos erreurs sur un dépôt local
Changé le nom de la branche que master vers main
Si votre branche principale se nomme master et non main, lancez les commandes suivantes
git branch -M main
J’ai créé une branche que je n’aurais pas dû créer
Supprimer une branche test
git branch -d test
J’ai modifié la branche avant de faire un commit
- Si vous avez modifié votre branche principale (main ou master) avant de créer votre branche
et que vous n'avez pas fait le commit, ce n’est pas bien grave. Il vous suffit de faire une
remise - ou un stash en anglais.
- La remise, ou stash, permet de mettre vos modifications de côté, les ranger, le temps
de créer votre nouvelle branche et d’appliquer cette remise sur la nouvelle branche.
1- Git stash
- Pour créer un enregistrement avant de commiter
2- Git checkout –b test
- Créez et basculer sur votre nouvelle branche. Test
3- Git stash apply
- récupérer les modifications que vous avez rangées dans le stash
- Appliquer ces modifications sur votre nouvelle branche test
J’ai modifié la branche après avoir fait un commit
- Dans ce cas j’ai fait des commit sur la branche main, ce qui n’est pas conseiller de le
faire, on doit toujours créer une branche test et faire mes modifications sur cet
branche, donc si par erreur j’ai fait mes commit directement sur la branche main, on
procède comme suit pour enlever la dernière commit et la déplacer vers la nouvelle
branche test créer
4- Git log / git log –oneline –graph / git log 2
- Pour afficher l’historique des commit et prendre le hach (identifiant de commit)
5- git reset --hard HEAD^
- Cette ligne de commande va supprimer de la branche principale votre dernier commit. Le
HEAD^ indique que c'est bien le dernier commit que nous voulons supprimer. L’historique
sera changé, les fichiers seront supprimés.
6- Git checkout –b test
- Créez et basculer sur votre nouvelle branche. Test
7- git reset --hard b0f43b6b
- Renouvelez la commande git reset, qui va appliquer ce commit sur votre nouvelle
branche !
- Il n'est pas nécessaire d'écrire l'identifiant en entier. Seuls les 8 premiers caractères sont
nécessaires.
Le message de mon commit est erroné
--Amend : commande qui permet de modifier le dernier commit
--Amend -m : commande qui permet de modifier le message (-m) de dernier commit
git commit --amend -m "3- 3/2/22 : 3eme commit pour le fichier [Link]"
- Changer le message de dernier commit
git commit --amend --no-edit
- Cette commande permet d’ajouter un fichier qu’on a oublié de l’ajouter dans le dernier
commit, (il faut ajouter ce fichier au staging area avec git add [Link] avant)
Rendre un fichier unstaged
git restore --staged [Link]
- La commande restore permet de rendre le fichier [Link] unstaged c.àd annule la
commande add
Supprimer un fichier unstaged
git clean -n
- La commande git clean -n permet de lister toutes les fichiers à supprimer, pour vérifier si on a
besoin de garder un fichier, si c’est le cas on doit ajouter cette fichier au staging area avec la
commande add
git clean –f
- La commande git clean -f permet de confirmer la suppression
13 Corrigez vos erreurs sur un dépôt distant
git revert head
Pour annuler des changements apportés à une branche publique
git reset
pour annuler des changements apportés à une branche privé
git reset va revenir à l'état précédent sans créer un nouveau commit, alors
que git revert va créer un nouveau commit.
14 Utiliser git reset
Imaginez que votre client vous demande une nouvelle fonctionnalité ; vous travaillez dessus
toute la journée et le lendemain, finalement, il change d'avis. Catastrophe !
Vous avez perdu une journée à développer une fonctionnalité pour rien, mais en plus il faut
que vous trouviez le moyen de revenir en arrière ! Heureusement, notre ami Git arrive à
notre rescousse avec la commande git reset !
Le HEAD est un pointeur, une référence sur votre position actuelle dans votre répertoire de
travail Git.
Il existe trois types de réinitialisation de Git
La commande git reset est un outil complexe et polyvalent pour annuler les
changements. Elle peut être appelée de trois façons différentes, qui correspondent
aux arguments de ligne de commande --soft, --mixed et --hard.
git reset notreCommitCible --hard
Cette commande permet de revenir à n'importe quel commit mais en oubliant absolument
tout ce qu'il s'est passé après ! Quand je dis tout, c'est TOUT ! Que vous ayez fait des
modifications après ou d'autres commits, tout sera effacé ! C'est pourquoi il est extrêmement
important de revérifier plusieurs fois avant de la lancer, vous pourriez perdre toutes vos
modifications si elle est mal faite.
git reset notreCommitCible --mixed
git reset notreCommitCible --soft
Cette commande permet de se placer sur un commit spécifique afin de voir le code à un
instant donné, ou de créer une branche partant d'un ancien commit. Elle ne supprime aucun
fichier, aucun commit, et ne crée pas de HEAD détaché.
1- Sur le repo local, on affiche le log pour prendre l’identifiant du dernier commit à
garder, c.à.d la commit que le head doit pointer vers maintenant
Git log
2- Faire un git reset --hard 0879f934 pour pointer le head vers la nouvel commit cible et
supprimer les derniers commit
git reset --hard 0879f934
3- Le changement de head est maintenant appliquer sur le repo local, et on doit faire un
push pour mettre à jour le repo distant (cela peut effacer des fichier en repo distants
ou bien modifier leurs contenue)
git push origin master --force
15 Corrigez un commit raté
-Voilà des semaines que vous développez vos projets et tout se déroule comme sur
des roulettes. Sauf qu’un beau matin, votre chef de projet vous demande de revenir à
une version précédente du projet. Il a aussi besoin de savoir qui a fait quel commit ! !
-Heureusement, les techniques de journalisation de Git ont été prévues pour
répondre à ce genre de situation.
L'objectif d'un gestionnaire de versions est d'enregistrer les changements apportés à
votre code. Il vous permet de consulter l'historique de votre projet pour :
savoir qui a contribué à quoi ;
déterminer où des bugs ont été introduits ;
annuler les changements problématiques.
Le SHA ou Secure Hash Algorithm est un identifiant. C'est ce grand code incompréhensible
qui nous permettra de revenir en arrière si besoin, à un commit exact.
Git log
énumère en ordre chronologique inversé les commits réalisés. Cela signifie que les
commits les plus récents apparaissent en premier. Cette commande affiche chaque commit
avec son identifiant SHA, l'auteur du commit, la date et le message du commit.
Git reflog
Git dispose d'un outil encore plus puissant, poussant le journal de logs à l’extrême.
git reflog va loguer les commits ainsi que toutes les autres actions que vous avez pu
faire en local : vos modificati
modifications
ons de messages, vos merges, vos resets, enfin tout, quoi .
Comme git log , git reflog affiche un identifiant SHA-1 1 pour chaque action. Il est
donc très facile de revenir à une action donnée grâce au SHA. Cette commande, c'est votre
joker, elle assure
ssure votre survie en cas d'erreur. Pour revenir à une action donnée, on prend les
8 premiers caractères de son SHA et on fait
git checkout 3e924b2
- git checkout fonctionne en mode detached head, c.à.d le pointeur head sera pointé vers
la commit cible, ici on ne peut pas faire des modifs directement sur la commit mais on
peut créer une autre branche de cet commit et appliqué ces modifs
git blame [Link]
git blame va afficher pour chaque ligne modifiée :
son ID ;
l'auteur ;
l'horodatage ;
le numéro de la ligne ;
le contenu de la ligne.
git cherry-pick
pick d356940 de966d4
- cherry-pick
pick permet de merger des commits d’une autre bracnhe avec la branche main et pas
un merge d’une branche totale
- Ici, nous prenons les deux commits ayant pour SHA d356940 et de9 de966d4,
66d4, et nous les
ajoutons à la branche principale sans pour autant les enlever de votre branche actuelle. Nous
les dupliquons !
16 Tagging And Releasing Part 1
Git tag
- Afficher les tags créés
Git tag -l ’’v1.*’’
- Afficher les tags créés conte
contenant v1.
Git tag v1.0
- Créer le tag v1.0
- Ici le tag a pris son message from the commit message, on l’appelle lightweight tag
Ou bien
Git tag -a v2.0 -m ’’ Second version’’
- Ici on a crée le tag v2.0 et nous avons personnaliser son message, on l’appelle annotating
tag
Git tag –d v1.0
- Supprimer tag v1.0
Git tag push origin --delete v1.0
- Supprimer tag v1.0 en remote repo
Git push origin v1.0
- Pusher le tag créé