Voir https://github.com/dandavison/delta
Afficher les modifs d'un commit à aujourd'hui (si branche à jour):
$ git diff --shortstat 1a43aef HEAD
Supprimer les branches locales d'une origine:
$ git remote prune origin
Tirer les modifications de master sans créer de commits polluants:
$ git pull --rebase
Réintegrer les changements de master sans créer de commit polluants:
$ git checkout branch
$ git rebase master
Ou
$ git rebase master branch
Enlever récursivement un fichier de l'index de git:
$ git rm --cached -r directory/
Informations sur les commits:
$ git log --stat
Afficher les differences avec le dernier commit:
$ git diff HEAD~1
Afficher les différences entre deux commits:
$ git diff sha-commit-1 sha-commit-2
Effacer un référence vers un dépôt distant:
$ git remote rm origin
Montrer les dépôts distants:
$ git remote -v
Ajouter un dépôt distant:
$ git remote add origin http://....
Montrer des infos sur un dépôt distant:
$ git remote show origin
Copier un commit (commit-id) d'une autre branche:
$ git checkout master
$ git cherry-pick commit-id
Afficher tout l'historique, y compris les commits devant HEAD:
$ git reflog
Afficher toutes les modifications d'un fichier, avec auteur de la modif et date:
$ git blame /path/to/file
Afficher l'historique d'un fichier sous forme de patchs successifs:
$ git log -p /path/to/file
Annuler les modifications sur un fichier:
$ git checkout nomfichier
$ git checkout numcommit nomfichier
Modifier un message de commit:
$ git commit --amend
/!\ Les copies de travail doivent être claires !
Sur le distant:
$ git config --local receive.denyCurrentBranch updateInstead
Faire un squash, cad fusionner des commits (3 dans l'exemple ci-dessous):
$ git rebase -i HEAD~3
# Puis remplacer
pick f392171 Added new feature X
pick ba9dd9a Added new elements to page design
pick df71a27 Updated CSS for new elements
# Par
pick f392171 Added new feature X
squash ba9dd9a Added new elements to page design
squash df71a27 Updated CSS for new elements
Faire un rebase -> déplacer le point d'origine d'une branche vers le dernier commit:
$ git fetch repositoryname
$ git rebase master branchname
# Ou en mode interactif
$ git rebase -i
Créer un alias git pour améliorer le log:
# configurer un alias
$ git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
# ensuite afficher l'historique
$ git lg
Historique plus clair:
$ sudo apt-get install tig
$ tig
# Pour tout voir:
$ tig --all
Pour un accés serveur multi voir ou pour plus d'infos voir:
- https://git-scm.com/book/en/v2/Git-on-the-Server-Setting-Up-the-Server
- https://git-scm.com/docs/git-shell
Site sympa pour s'entrainer sur les branches:
http://learngitbranching.js.org/
Versionnage de fichiers binaires: voir git annex (une solution parmi d'autres)
Detached Head: comme une potentielle nouvelle branche, possibilité de commiter, de travailler et de créer une branche plus tard.
Avoir un résumé des commits:
$ sudo apt install git-extras
$ git-summary
Montrer les commits d'un utilisateur:
$ git log --author="j.doe"
Supprimer un sous module:
$ git submodule deinit path/to/module
$ rm -rf .git/modules/path/to/module
$ git rm -rf path/to/module
$ vim .gitmodules # Enlever la section concernant le module
Configuration lcoale d'un dépôt:
$ vim $PROJECT/.git/config
Changer le remote d'une branche protégée:
[branch "master"]
remote = origin
merge = refs/heads/master
Voir: https://www.motowilliams.com/conditional-includes-for-git-config
Pour par exemple changer de nom en fonction du répertoire.
Créer une config perso et une config travail:
$ vim ~/.gitconfig-personal
[user]
email = [email protected]
name = Rémi
$ vim ~/.gitconfig-work
[user]
email = [email protected]
name = Rémi
Inclure ces configs:
$ vim ~/.gitconfig
// supprimer la section [user]
[includeIf "gitdir:/**"]
path = .gitconfig-personal
[includeIf "gitdir:~/projects/work/**"]
path = .gitconfig-work
$ git reflog
$ git reset --hard SHA