MonWiki

Git

PagePrincipale :: DerniersChangements :: DerniersCommentaires :: Vous êtes ec2-3-21-100-34.us-east-2.compute.amazonaws.com


PagePrincipale . memos . Git

Git


Paramètres globaux


Avant d'utiliser Git, quelques paramètres à configurer:
git config --global user.name "Daniel Rocher"
git config --global user.email daniel.rocher@mondomaine.lemien
git config --global core.editor vim


Coloration syntaxique:
git config --global color.ui auto

éventuellement renseigner une clé privé (pour signature):
git config --global user.signingkey 19A5982E


Commandes de base


Aides:

git help

aide sur une commande:
git commande --help


Initialiser un dépôt:

mkdir monprog && cd monprog
git init



Ajouter des fichiers (existants) au dépôt:

git add fichier1 fichier2

Supprimer un fichier du dépôt:

git rm fichier


Voir le statut:

git status

sont affiché les fichiers modifiés ainsi qu'une liste de fichiers n'ayant pas été rajouté au dépôt.
Pour ignorer certains type de fichier (ex: *~, Makefile, *.o, ...), il est possible de créer un fichier .gitignore à la racine de notre projet contenant la liste des fichiers à ignorer. Il est également possible de créer un fichier d'exclusion global:
git config --global core.excludesfile Chemin_et_nom_du_fichier_d_exclusion

Commit:

git commit -a -m "mon premier commit"

Modifier le changelog du dernier commit

git commit --amend


Voir les logs:

git log

En cas de perte d'un commit, on peut utiliser reflog pour peut-être le retrouver. reflog garde une trace de nos déplacements (checkout, commit, merge, ...):
git reflog

Voir les différences:

modifications en cours:
git diff

différence avec un commit particulier:
git diff commit


Annuler les modifications courantes et revenir en haut de la branche:

git reset --hard HEAD

restaurer un fichier tel qu'il était lors du dernier commit:

git restore fichier (remplace git checkout fichier)


Se positionner sur un commit particulier:

git checkout commit
Attention:, à ce stade nous sommes sur aucune branche (détaché).

Annuler le dernier commit


git reset HEAD^


Attention: à utiliser AVANT de pousser vos commits (via git push)

Si le commit a déjà été poussé, il faut créer un nouveau commit qui inverse (revert) :

git revert 97392dad053c420ecc989915fd6857962e568913
git push



Branches


Voir les branches:

git branch
git branch -a
affichera également les branches distantes

Créer une branche à partir de la position courante:

git branch branche1


Se positionner sur la branche:

git switch branche1 (remplace git checkout branche1)

Créer une branche à partir d'un commit et se positionner dessus:

git switch -c branche2 commit (remplace git checkout -b branche2 commit)

Supprimer une branche locale

git branch -d branche1

"Faire le ménage" sur les branches distantes qui n'existe plus

git fetch origin --prune

Pousser des branches:


Pousser une branche et paramétrer pour suivre la branche distante (branche de suivi):
git push -u <remote> <branche>

Toutes les branches :
git push <remote> --all

"merger" une branche avec la branche maître:

git switch master
git merge branche1


rebase


permet de repartir sur de "bonnes bases", par exemple si on souhaite intégrer le travail effectué sur une autre branche, et les intégrer dans notre branche (sans les fusionner).

Lire https://www.miximum.fr/blog/git-rebase/

Résoudre les conflits

modifiez les fichiers ayant comme statut: "Unmerged paths"

Solution 1: recherchez dans chaque fichiers les sections à corriger comprise entre les lignes <<<<<<<, =======, et >>>>>>> ) puis, une fois corrigé:
git commit -a

Solution 2: utilisez un outil de fusion externe à l'aide git mergetool

Exemple avec kdiff3:
git mergetool --tool kdiff3

et une fois les conflits résolus:
git commit

Il est possible de choisir un outil de résolution de conflits par défaut:
git config --global merge.tool vimdiff

Créer et appliquer des patchs


créer un fichier diff:

git diff commit > monpatch.patch


Vérifier si le patch s'applique sans erreur:

git apply --check monpatch.patch

Appliquer un correctif :

git apply monpatch.patch

Picorage (cherry-pick) :



git switch cm-14.1
git cherry-pick 1b4feb73e288ee3e18f6182a0760f53c1166c3cb



Les tags


Lister les tags:

git tag

tags légers: (sans signature, sans adresse mail, ...)

git tag 1.1.beta1 (il s'agit simplement d'un pointeur vers un commit)

tags annotés:

git tag -a 2.0 -m "version 2.0"

git show 2.0
tag 2.0
Tagger: Daniel Rocher <daniel.rocher@mon.domaine>
Date: Fri Jul 30 15:17:44 2010 +0200

version 2.0

commit 42ce24af4104fe6c1a460faaeb78f2d37af80fde
Author: Daniel Rocher <daniel.rocher@mon.domaine>
Date: Fri Jul 30 14:45:51 2010 +0200




tags annotés et signés:

git tag -s 2.1 -m "version 2.1"

ou bien en spécifiant la clé:
git tag -s -u 19A5982E 2.1 -m "version 2.1"

Tags et dépôt distant


Pour pousser un tag sur le dépôt distant:
git push origin 2.1

Pousser tous les tags:
git push origin --tags

Supprimer un tag distant:
git push --tags origin :2.1


Travailler à plusieurs avec git


Créer le dépôt:

mkdir projet.git && cd projet.git/
git init --bare


Ou bien cloner notre projet existant pour créer un dépôt public:
git clone --bare projet/ projet.git

Cloner le projet distant (exemple d'accès via ssh):

git clone ssh://daniel@mon.domaine/serveur/git_depots/projet.git

git remote affichera la liste des dépôts distants
git remote -v idem, mais avec plus d'informations

Ajouter un nouveau dépôt distant:

git remote add robert ssh://daniel@autre.domaine/var/git_depots/projet.git

Récupérer les informations d'un dépôt distant mais sans l'inclure dans notre branche courante:

git fetch origin
git fetch robert branche2


ces modifications seront visibles dans des branches spécifiques de mon dépôt local (dans l'exemple: origin/master pour l'un, robert/branche2 pour l'autre).

Les branches de suivi:


Important: git clone configure automatiquement une branche master qui est une branche de suivi pour origin/master.

Si on ne veux pas utiliser git pull <repository> <refspec> explicitement (ou git push <repository> <refspec>) , on peut créer une branche de suivi. Exemple:
git push --set-upstream origin master
git push --set-upstream origin experimental


Ou plus simplement, si je donne un nom de branche locale qui existe dans une branche distante, git créera automatiquement une branche locale qui suivra la branche distante:
git switch experimental
donnera le même résultat que la commande précédente.

Si une branche existe déjà localement, elle ne pourra pas être créé. On pourra cependant modifier la configuration pour que notre branche locale suive la branche distante. Exemple pour master ->origin/master:
git config branch.master.remote origin
git config branch.master.merge refs/heads/master


autre exemple (experimental -> origin/experimental):
git config branch.experimental.remote origin
git config branch.experimental.merge refs/heads/experimental




Tirer les modifications des dépôts distants

git pull ( = git pull origin master)
git pull robert branche2

Attention! git pull récupère la branche distante et la fusionne avec notre branche locale (commit de fusion).

Pousser nos modifications vers un dépôt distant (si droit en écriture):

git push ( = git push origin master)

Sauvegarder l’état actuel de votre travail (stash)


Permet de sauvegarder un travail sans faire de commit afin de pouvoir le réutiliser plus tard.

Sauvegarder l’état actuel
git stash
ou
git stash save "etat actuel"

Afficher la pile courante
git stash list

Appliquer le dernier stash de la pile SANS le supprimer
git stash apply

Appliquer le dernier stash de la pile et le supprimer
git stash pop

Maintenance


vérifier le dépôt:
git fsck

Libérer de l'espace disque, compresse certains objets, ...:
git gc


Effacer tous les commits perdus, etc -- À utiliser avec précaution !!!

git fsck --no-reflogs --unreachable
git reflog expire --expire=now --all
git gc --prune=now
git fsck --no-reflogs --unreachable



Références:




Pages utiles: RechercheTexte, TableauDeBordDeCeWiki
Flux RSS: Wiki, Commentaires
Il n'y a pas de commentaire sur cette page. [Afficher commentaires/formulaire]