Skip to content

Instantly share code, notes, and snippets.

@Davidegloh
Last active May 6, 2021 16:19
Show Gist options
  • Save Davidegloh/157205183af98dd2c3f2d7d676b51f55 to your computer and use it in GitHub Desktop.
Save Davidegloh/157205183af98dd2c3f2d7d676b51f55 to your computer and use it in GitHub Desktop.
[Git commandes]#github

MD global du prof: https://github.com/O-clock-Sinbad/S05E09-exo-git-slampazona

Permet de me dire ou je suis (orientation) pwd

Afficher la liste des fichiers dans le répertoire courant (là où je suis) ls

rentrer dans un document : cd + nom du document
Revenir dans dans le dossier parent : cd + ../

Création d’un nouveau dossier : mkdir + nom dossier

Suppression d’un dossier : rmdir + nom du dossier

Création d’un nouveau fichier : touch + nom du fichier

Supprimer un fichier : rm + nom du fichier

Suppression récursive qui va supprimer le dossier + les autres dossiers et fichiers à l’intérieur : rm -r + nom du dossier

Déplacer et renommer

Déplacer un dossier dans l’autre : mv + dossier objet + dossier cible

Renommer un dossier : mv + nom du dossier objet + nouveau nom

Rentrer dans une branche : git checkout+ nom de la branche

Afficher toutes les branches dans la console : git branch -a

Pull request = demande de merge

conflit = modification au meme endroit au meme moment

git pull = git fetch + git merge

git fetch = je récupère et je mets dans mon dépot

Génération d'une Pull Request

On va dans son dépot sur github.com, et on clique sur Pull Requests en haut, puis sur le bouton vert New Pull Request

On choisi master <- henriette, puis on créé cette pull request.

On arrive sur une formulaire de texte, c'est pour indique des choses concernant la pull request, on saisit ou pas des informations. Puis on clique sur Create Pull Request. A partir de la la pull request est réellement créee et en attente de validation.

Pour valider la pull request, on va dessus, et on clique sur le bouton vert Merge pull request, et Confirm merge.

Normalement la pull request passe en violet si elle est mergée.

On refait exactement la même chose mais pour la branche michel et PAF conflit ! C'est pas grave on continue de créer la pull request, c'est juste qu'on pourra pas la valider sur le site. On va directement régler le conflit en ligne de commande.

Pour faire ça on va reproduire les mêmes conditions qu'une pull request, c'est à dire on va créer un merge entre michel et master

Déjà on va se positionner sur master et récupérer le résultat de la merge request qui a été faite sur master via la pull request

git checkout master
git fetch # on récupère ce qu'il s'est passé sur le dépot distant et me le met sur le dépot local
git merge michel # on va provoquer le même conflit que la PR

Et là, conflit !

Fusion automatique de playlist.md
CONFLIT (contenu) : Conflit de fusion dans playlist.md
La fusion automatique a échoué ; réglez les conflits et validez le résultat.

Ici il est marqué que le fichier playlist.md est en conflit. Il faut donc régler ce conflit. Plusieurs solutions s'offrent à nous :

  • On accepte les "Current changes" à savoir on garde tel qu'il était au niveau de ce conflit avant le conflit
  • On accepte les "Incoming Changes" à savoir on régle le conflit en disant les modification de la branche à merger sont celles qu'on veut.
  • On mixe les 2, c'est à qu'on supprimes toutes trace de <<<<<<< ou de ====== et de >>>>>>> et on ne garde que ce qu'on veut, ( en adaptant suivant la situation )

Dans tous les cas, le fichier doit être correct sans tous les chevrons à la fin de la résolution du conflit. Une fois qu'on a fini de régler les conflits, le commit de merge n'a pas pu se créer de façon automatique, on va donc devoir le faire nous même.

On ajoute donc les fichiers modifiés à un commit, on commit et on push

git add playlist.md
git commit -m "Merge de michel dans master"
git push

Conflit réglé

Multi remote

Le multi remote c'est la possibilité d'avoir 2 remotes ou plus différents sur le même dépot local. Par exemple son propre remote avec son code propre, et celui du prof

Dans quel but ?

Pouvoir récupérer le code du prof et le merger dans son propre code, et pouvoir pousser tout ça dans son propre remote repository.

Comment qu'on fait ?

On commence déjà par aller récupérer l'url ssh du dépot à ajouter, à savoir le dépot du prof

Puis on retourne dans ton dépot et on fait la commande suivante :

git remote add prof git@github.com:O-clock-Sinbad/exo-git-slampazona.git

Si on veut vérifier on tape la commande :

git remote -v

On a donc 2 remote différents, origin avec le code étudiant, et prof avec le code du prof. Et chaque remote repository à ses propres branches.

Comment qu'on récupère le code du prof

Déjà on commence par mettre les repository à jour en local :

git remote update

On veut récupérer le code de la branche master du dépot du prof, donc de la branche prof/master, on veut donc merge cette branche dans notre branche master en local ( Pour rappel grace au upstream la branche master local suit la branche distante origin/master )

On provoque un fetch pour être à jour, et un merge pour récupérer, ou alors, on fait un pull qui fait les 2 à la fois

git pull prof master

La première fois on va avoir l'erreur : fatal: refus de fusionner des historiques sans relation, il faut donc lui dire de créer une relation sur cet historique.

git pull prof master --allow-unrelated-histories

La y'a surement conflit 3 solutions :

  • Je règle les conflits un par un ( c'est long et source d'erreur, mais très précis )

  • J'accepte que en cas de conflit c'est le code du prof qu'on doit garder dans tous les cas, ce moment là j'utilise le code suivant à la place

git pull prof master --allow-unrelated-histories -X theirs

Le -X c'est le type de résolution des conflits, theirs c'est le code des "autres" et ours c'est mon code. Si je met theirs en cas de conflit, on résout le conflit en supprimant mon code en conflit et on remplace par celui du prof. Si je met ours c'est l'inverse.

Si jamais j'ai lancer un pull et que j'avais pas prévu que j'avais un conflit, je le constate après, je peux annuler la fusion avec la commande :

git merge --abort

Puis je recommance la fusion comme je l'entend

Git workflow

Git workflow

Annexes

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment