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
|
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. |
|
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
|
Annulez des actions
|
git reflog MaBranche
|
Ajout d'un fichier au dernier commit
|
git add fichier_oublié
git commit --amend
git commit --amend --author "New Author Name <email@address.com>"
git commit --amend -m "Nouveau commentaire"
|
|
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 |
 |
Ne pas utiliser git rebase pour les commit qui ont déjà été poussé sur le serveur |
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
|
|
git stash
git rebase -i HEAD~2
git stash pop
git add my-file.txt
git commit --amend
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 --hard xxxxxxxx
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 nom_dépôt_distant git://github.com/createur/projet.git
git branch -u nom_dépôt_distant/nom_branche
git remote rename nom_du_dépôt_distant nouveau_nom_du_dépôt_distant
git remote rm nom_dépôt_distant
|
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 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
|
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.
- GitKraken
- giggle
|
git config --system core.longpaths true
|
Configuration
Fichiers
- .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
|
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];
|