git
Git fonctionne avec 3 repertoires :
- votre répertoire de travail, ou Working Directory
- zone spéciale que l'on appelle l'index, ou la zone de staging
- zone 'git repository' (sur le serveur éventuellement) est la base de données de votre projet telle qu'elle était lors de votre dernier commit.
source : https://www.miximum.fr/blog/enfin-comprendre-git/
Git rebase :
- git rebase master : application de commit depuis une branche qui aurait évolué depuis sa création
source : https://mcorbin.fr/posts/2020-06-27-git-avancee/
Dans la branche 'new-branch', après le git rebase master :
- git rebase -i HEAD~5 :fusionner certains commit dans sa branche (non pushée) pour faciliter la lecture du suivi...
source : https://www.miximum.fr/blog/enfin-comprendre-git/
# création/positionnement dans une branche 'test_rebase'
git checkout -b test_testrebase
# création de 5 fichiers commités dans sa branche
for i in $(seq 1 5);do touch "fichier-$i" && git add . && git commit -am "fichier-$i";done
# git log retourne un tas de commit inutile...
# on peut réorganiser les 5 derniers commit avec la commande :
git rebase -i HEAD~5
dans le rebase, sur chaque ligne "pick ...." :
- p (pick) pour ne rien faire (utiliser le commit)
- r (reword) reformulation du commit
- f (ficup) fusionne avec le précédent en supprimant le message
- s (squash) pareil en laissant le message d'origine
- d (drop) supprimer le commit
Gestion des retour arrière :
source : https://learngitbranching.js.org/?locale=fr_FR
- en local : git reset HEAD~1
- fait remonter une branche en arrière
- ne fonctionne pas sur les branches distantes - depot partagé : git revert HEAD
- création d'un nouveau commit qui annule le précédent
- necessite un push pour actualiser le dépot
Copie d'une série de commit en dessous de l'emplacement actuel (HEAD)
- git cherry-pick commit1 commit2 commit5
- copie les commit dans HEAD
- le commit ne doit bien sur pas être dans la branche...
Utilisation de Meld pour gérer les différences/conflits :
- installer meld : $sudo dnf install meld
- modif .gitconfig pour prise en compte de l'utilitaire
Git création d'un dépot :
source : https://git-scm.com/book/fr/v1/Git-sur-le-serveur-Mise-en-place-du-serveur
Sur le serveur
- ajouter un user git (c'est mieux que bosser sous root...)
- création d'un dépot (vide) :
cd /opt/git mkdir monProj.git cd monProj.git git --bare init
-
c'est tout pour le serveur
Sur le client
- copier ou pas les fichiers de votre projet dans un repertoire
- dans le repertoire ci-dessus
# initialisation du depot git init # pec des fichiers/repertoires (sinon .gitignore) git add <fichiers et/ou repertoires> # premier commit git comm -m 'premire commit' # on peut aussi commter directement tous les fichiers git commit -a -m 'premier commit' # ajout du dépot distant git remote add origin git@gitserveur:/opt/git/monProj.git # push de la branche courante (master) sur le serveur git push origin master
Git : branche et stash
- création d'une branche <predator> et modification code à l'interieur
# git checkout -b predator
- sv provisoire pour se positionner dans une autre branche
# git stash save 'sauve providoire de mes modif'
- on se positionne dans une autre branche et appliquer/sauvegarder des modif
# git co autreBranche
...
- retour sur la branche <predator> et application des modif précédentes
# git co predator
# git stash apply
Git : la remise ...
Changer de branche sans comitter les modif faites dans la branche courante.# remiser la branche courante git stash # lister les différents 'stash' git stash list # restaurer un stash après être revenu dana la branche # dernier stash git stash pop Source : https://git-scm.com/book/fr/v1/Utilitaires-Git-Le-remisage
Git reset vs git checkout ( a lire absoluement !)
source : https://delicious-insights.com/fr/articles/git-reset/
http://ndpsoftware.com/git-cheatsheet.html#loc=workspace;
Annuler le dernier push :
git reset --keep HEAD@{1}
Annuler le derner commit non propagé (non pushé)
git reset HEAD^1 ps : conserve les modifications
Modifier adresse mail ou nom auteur de tous les commit
# adresse mail git filter-branch -f --env-filter "GIT_AUTHOR_EMAIL='jean.valjean@gmail.com;'" HEAD # auteur git filter-branch -f --env-filter "GIT_AUTHOR_NAME='Paulo;'" HEAD