Documentation
Commandes utiles
Commande
|
Alias
|
Explication
|
git init |
|
initialise un nouveau dépôts
|
git clone url-dépôt [/dossier] |
|
clone un dépôt
|
Fichiers
|
git add file.ext |
ga file.ext |
ajoute les modifications de file.ext à l'index
|
git add --all |
gaa |
ajoute les modifications de tous les fichiers du dépôts à l'index (-n)
|
git reset HEAD file.ext |
grh file.ext |
retire file.ext de l'index
|
git checkout HEAD file.ext |
gco HEAD file.ext |
annule les modifications de file.ext (garde l'index)
|
git reset --hard && git clean -dfx |
gpristine |
annule toutes les modifications, supprime l'index et les fichiers non-suivis
|
Status
|
git status |
gst |
affiche les fichiers indexés, non-indexés et non-suivis
|
git status --short |
gss |
affiche dans un format court les fichiers indexés, non-indexés et non-suivis
|
git diff |
gd |
affiche les modifications non-indexées
|
git diff --cached |
gdca |
affiche les modifications indexées
|
Commit
|
git commit -v |
gc |
affiche et valide les modifications indexées
|
git commit -v --amend |
gc! |
modifie le dernier commit en validant les modifications indexées et en changeant le message de validation
|
git commit -v --all |
gca |
indexe tous les fichiers versionnés (pas les nouveaux) et valide le tout
|
Branches
|
git branch Branche1 |
gb Branche1 |
créé Branche1, sans argument liste les branches locales
|
git branch --all |
gba |
liste les branches locales et distantes
|
git branch -d Branche1 |
gbd Branche1 |
supprime Branche1 seulement si les changements locaux ont été pushés
|
git checkout Branche1 |
gco Branche1 |
bascule sur Branche1
|
git checkout master |
gcm |
bascule sur master
|
git checkout develop |
gcd |
bascule sur develop
|
git checkout -b Branche1 |
gcb Branche1 |
créé Branche1 et bascule sur Branche1
|
git merge Branche1 |
gm Branche1 |
fusionne Branche1 dans la branche courante
|
git rebase master |
grb master grbm |
rebase la branche courante au bout de master
|
Dépôts distants
|
git remote add origin url |
gra origin <url> |
ajout du dépôt distant origin avec son url
|
git remote remove origin |
grrm origin |
retire le dépôt distant origin
|
git remote -v |
grv |
lister les dépôts distants
|
git fetch origin |
gf origin |
récupère les changements de toutes les branches du dépôt distant origin
|
git fetch --all --prune |
gfa |
récupère les changements de toutes les branches de tous les dépôts distants et supprime les refs des branches qui n'existent plus sur les dépôts distants.
|
git branch Branche1 origin/Branche1 |
gb Branche1 origin/Branche1 |
copie Branche1 du dépôt distant origin dans un branche locale Branche1
|
git checkout --track origin/Branche1 |
gct origin/Branche1 |
copie Branche1 du dépôt distant origin dans un branche locale Branche1 et bascule sur cette la branche locale Branche1
|
git pull origin master |
gl origin master |
récupère les changements de la branche master du dépôt distant origin et fusionne les changements dans la branche locale master
|
git pull --rebase origin master |
gup origin master |
récupère les changements de toutes les branches du dépôt distant origin et rebase les changements au bout de la branche locale master
|
git push --tags origin master |
gpt origin master |
pousser la branche locale master et ses tags pour mettre à jour la branche master du dépôt distant origin
|
git push --force-with-lease |
gpf |
|
Créez un dépôt
|
git init
|
Ignorez des fichiers
.gitignore
|
*~
MonDossier/*
|
 |
Le fichier .gitignore affecte le dossier dans lequel il se trouve ainsi que les sous-dossiers.
On peut donc créer des fichiers .gitignore spécifiques pour certains sous-dossiers. |
ignore locally without .gitignore
Works as .gitignore but this file is not tracked.
|
git clone git://url/projet.git [destination]
git clone --depth n git://url/projet.git
git clone git://url/projet.git [--branch master] --single-branch [destination]
|
Ajouter / retirer de l'index
|
git add MonFichier
git add -A -n
git reset HEAD MonFichier
git reset HEAD
|
Indexation partielle
Permet de ne valider qu'une partie des modifications d'un fichier.
Utilisez l'option patch de git : git add -p
Options pour chaque bloc de modification du fichier :
indexer cette partie [y,n,a,d,/,j,J,g,e,?]?
y - indexer cette partie
n - ne pas indexer cette partie
a - indexer cette partie et toutes celles restantes dans ce fichier
d - ne pas indexer cette partie ni aucune de celles restantes dans ce fichier
g - sélectionner une partie à voir
/ - chercher une partie correspondant à la regexp donnée
j - laisser cette partie non décidée, voir la prochaine partie non encore décidée
J - laisser cette partie non décidée, voir la prochaine partie
k - laisser cette partie non décidée, voir la partie non encore décidée précédente
K - laisser cette partie non décidée, voir la partie précédente
s - couper la partie courante en parties plus petites
e - modifier manuellement la partie courante
? - afficher l'aide
Valider l'index
|
git commit
git commit -a
|
Visualiser les modifications
|
git status
git diff
git diff --cached
git diff master MaBranche -- MonFichier.ext
|
Supprimer / déplacer des fichiers
|
git rm MonFichier
git rm --cached MonFichier
git mv ancien_fichier nouveau_fichier
|
 |
Le dossier parent peut être renommé sans influence sur le dépôt local ou distant. |
Visualisez l'historique des validations
|
git log
|
Options :
- -p : montre les différences introduites entre chaque validation
- -2 : limite la sortie de la commande aux 2 entrées les plus récentes
- -pretty=format="%h - %an, %ar : %s" : décrit précisément le format de sortie
- --name-only : affiche la liste des fichiers modifiés
- --name-status : affiche la liste des fichiers affectés accompagnés du staus ajout, modification ou suppression
|
gitk
|
Modifier l'historique
|
git reflog MaBranche
|
 |
Si les modifications ont déjà été envoyées au serveur, il est toujours possible d'écraser les commits envoyés git push --force-with-lease |
Modifier le dernier commit
|
git commit --amend
git commit --amend --author "New Author Name <email@address.com>"
git commit --amend -m "Nouveau commentaire"
|
|
git rm --cached unwanted-file.ext
git commit --amend
git reset --soft HEAD~
git reset unwanted-file.ext
git commit -c ORIG_HEAD
|
Modifiez un commit autre que le dernier
|
git rebase -i HEAD~2
git commit --amend
git rebase --continue
|
 |
Tous les commit entre celui qui sera modifié et HEAD seront réécrit |
|
git add file.txt
git commit
git rebase -i xxxxx
git rebase --continue
|
|
git stash
git rebase -i HEAD~2
git stash pop
git add my-file.txt
git commit --amend
git rebase --continue
|
Exemple: squash commits HEAD~3..HEAD
|
git rebase -i HEAD~3
|
In case of the following error: cannot 'squash' without a previous commit
When squashing, the commit selected for squashing is combined with the commit that precedes it in the (edited) list, i.e. the commit from the previous line.
In your case - there is no previous commit for 56bcce7. You have to do one of the following
|
1 r 01cc5a08 ...
2 s a2b6eecf ...
|
Diviser l'avant-dernier commit
|
git rebase -i HEAD~2
git reset HEAD^
git add -p
git commit -m "partie1"
git commit -m "partie2"
git rebase --continue
|
Stopper temporairement le suivi d'un fichier
|
git update-index --assume-unchanged MonFichier
git update-index --no-assume-unchanged MonFichier
|
Supprimer les modifications non-commitées
|
git checkout -- fichier_à_réinitialiser
git reset --hard && git clean -dfx
|
Supprimez les éléments non-versionnés
|
git clean -dxf
|
Options :
- -d : affecte les dossiers en plus des fichiers
- -n : affiche les éléments qui seront supprimés mais ne supprime rien
- -x : ne pas utiliser les règles d'exclusion (.gitignore, $GIT_DIR/info/exclude)
- -f : obligatoire si la variable clean.requireForce est à true
Supprimer les derniers commits
HEAD |
Pointer to the current commit. Parent of the next commit.
|
Index |
Staged files proposed to the next commit.
Stage convert working directory into index.
Commit convert Index into a commit.
|
Working directory |
Sandbox. The actual files.
|
Fait reculer HEAD, les commits resetés sont perdus.
|
git reset --soft HEAD~1
git reset --mixed HEAD~1
git reset --hard HEAD~1
git log --pretty=oneline
git branch test
|
Créé un nouveau commit qui contient les modifications inverses du commit à annuler.
Permet d'annuler un commit qui n'est pas le dernier.
|
git revert --hard xxxxxxxx
|
|
git cherry-pick xxxxxxxx
|
 |
Utiliser git log pour connaitre les ids des commits. |
Des commits locaux ont été fait sur la branche badone par erreur. Il faut les déplacer vers la branche goodone.
|
git checkout goodone
git checkout goodone
git merge badone
git checkout badone
git reset --hard origin/badone
|
|
git reset
git reset --hard
|
|
git reset --soft HEAD~
git reset HEAD~
git reset --hard HEAD~
|
Se déplacer dans l'arbre
|
git checkout [commit id]
git checkout [branch name]
git log
|
|
git stash push -u
git stash list
git stash show
git stash pop
git stash
git pull
git stash pop
|
Le remisage
Étiquetage (Tags)
 |
Par défaut la commande git push n'envoie pas les étiquettes vers les serveurs distants.
Pour ce faire : git push --tags |
Créez des étiquettes
|
git tag v2.0
git tag v1.2 9fceb02
git tag -d v1.2
git push --delete origin v1.2
|
Listez vos étiquettes
|
git tag
git tag -l 'v1.*'
git show v1.0.0
|
Dépots distants
Ajoutez des dépôts distants
|
git remote -v
git remote add origin git://github.com/createur/projet.git
git push --set-upstream origin master
git branch -u origin/master
git remote rename current_name new_name
git remote rm repo_name
git remote set-url origin https://github.com/createur/projet.git
|
Mise à jour et validation
|
git fetch origin
git merge origin/master
git branch MaBranche origin/MaBranche
git checkout -b MaBranche origin/MaBranche
git checkout --track origin/MaBranche
git pull origin master
git push --tags origin master
git push -u origin <Ma_Nouvelle_Branche>
|
Branches des dépôts distants
|
git branch -r
git branch -a
git config --get remote.origin.url
git push origin :MaBranche
|
|
git branch
git branch --merged
git branch --no-merged
git branch -a
|
|
git branch MaBranche
git branch MaBranche [AutreBranche|Commit-ID|Tag]
git checkout MaBranche
git checkout -b NouvelleBranche
git branch -d NouvelleBranche
git branch -m NewBranchName
git push origin :OldBranchName NewBranchName
git push origin -u NewBranchName
git checkout AutreBranche path/file.ext
|
 |
git ne permet de basculer vers une branche que si toutes les modifications de la branche courante ont été commitées |
Merge
|
git checkout master
git merge MaBranche
git branch -d MaBranche
git mergetool
git add MonFichier.ext
git merge --ff-only <commit-hash>
|
Rebase
|
git rebase master MaBranche
git checkout MaBranche
git rebase master
git checkout master
git merge MaBranche
git branch -d MaBranche
|
- Réécrit les commits de la branche à rebaser (MaBranche) comme des tout nouveaux commit au sommet de la branche courante (master)
- Permet de simplifier l'historique.
 |
Ne rebasez jamais des commits qui ont déjà été poussés sur un dépôt public |
Règle générale:
- When pulling changes from origin/develop onto your local develop use rebase.
- When finishing a feature branch merge the changes back to develop.
Noms de branches insensible à la casse
Les noms de branches git ne sont pas sensible à la casse
|
git checkout -b My_New_Branch /origin/my_new_branch
git branch -m My_New_Branch tmp_branch
git branch -m tmp_branch my_new_branch
|
Autre solution: forcer git à ignorer la casse
%HomePath%\.gitconfig
|
[core]
ignorecase = true
|
|
git fetch -p
|
Exportez dans une archive
|
git archive mon_tag -o mon_archive.zip -9 --prefix=mon_dossier/
git archive mon_tag --prefix=mon_dossier/ >mon_archive.tar.gz
|
|
git blame -L 12,22 fichier.ext
git blame -L 12,12 fichier.ext
git gui blame --line=12 fichier.ext
git log -2 --oneline -- deletedFile.cs
git blame 37f91c2fa -- deletedFile.cs
git gui blame 37f91c2fa deletedFile.cs
|
bisect
Définit un commit de début et un commit de fin et permet de lancer un test sur chaque commit intermédiaire.
Permet de localiser un commit introduisant un bug.
Installation
|
sudo pacman -S git tk
|
~/.bashrc
|
source /usr/share/git/completion/git-completion.bash
|
- gitk, installé avec git. Nécessite l'installation du paquet tk. À lancer dans le répertoire à analyser.
- GitFiend
- GitKraken (la version gratuite ne supporte pas les dépôts privés ni azure)
- giggle (linux)
- Git Extensions (windows)
|
git config --system core.longpaths true
|
Configuration
- .git/config accès par défaut ou avec l'option --local
- ~/.gitconfig accès avec l'option --global
- /etc/gitconfig accès avec l'option --system
|
git config --global --edit
git config --system --edit
git config --local --edit
git config --list --show-origin
|
Commandes
|
git config --global core.editor "nano -w"
git config --global user.name "Prénom Nom"
git config --global user.email "compte@email.com"
git config --global color.ui true
git config --global merge.tool meld
git config --global credential.helper cache
git config --global credential.helper 'cache --timeout=3600'
git config --global credential.helper store
git config --global core.autocrlf true
git config --global core.autocrlf input
git config --global core.autocrlf false
cd /usr/share/git/credential/gnome-keyring
sudo make
git config --global credential.helper /usr/share/git/credential/gnome-keyring/git-credential-gnome-keyring
|
~/.gitconfig
|
[core]
editor = nano -w
[user]
name = Prénom Nom
email = compte@email.com
[color]
ui = true
[merge]
tool = meld
[credential]
helper = cache | store
|
Les alias Git
|
git config --global alias.unstage 'reset HEAD --'
git config --global alias.last 'log -1 HEAD'
git config --global alias.ci commit
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.st status
|
~/.gitconfig
|
[alias]
unstage = reset HEAD --
last = log -1 HEAD
ci = commit
co = checkout
br = branch
st = status
|
git diff avec meld
meld
|
meld .
|
difftool
|
git difftool -y fichier.ext
|
git-diff-meld.sh
|
#!/bin/bash
meld $2 $5
|
|
git config --global diff.external /path/to/git-diff-meld.sh
|
~/.gitconfig
|
[diff]
external = /path/to/git-diff-meld.sh
|
|
cd /srv
mkdir git
chown git:git git
cd /srv/git
git init project.git --bare --shared
chown -R git:git project.git
git remote add origin user@server:/srv/git/projet.git
git push origin master
git clone user@server:/srv/git/projet.git
systemctl start git-daemon.socket
|
Protocoles
local |
le dépôt distant est un autre répertoire dans le système de fichiers par exemple un répertoire partagé via NFS |
git clone /srv/git/projet.git
|
ssh |
permet de cloner et de pousser |
git clone utilisateur@serveur:/srv/git/projet.git
|
git |
daemon écoute sur le port 9418 pas d'authentification, tous le monde peut cloner et pousser |
|
http(s) |
permet de cloner mais pas de pousser |
git clone http://server/projetgit.git
|
|
pacman -S perl-cgi fcgiwrap
sc-start fcgiwrap.socket
|
/etc/nginx/nginx.conf
|
server {
listen 80;
server_name gitweb.myserver;
location /gitweb.cgi {
include fastcgi_params;
gzip off;
fastcgi_param SCRIPT_FILENAME /usr/share/gitweb/gitweb.cgi;
fastcgi_param GITWEB_CONFIG /etc/gitweb.conf;
fastcgi_pass unix:/run/fcgiwrap.sock;
}
location / {
root /usr/share/gitweb;
index gitweb.cgi;
}
}
|
/etc/gitweb.conf
|
our $projectroot = "/srv/git";
our @git_base_url_list = qw(git://myserver http://git@myserver);
$feature{'blame'}{'default'} = [1];
$feature{'highlight'}{'default'} = [1];
|