Skip to content

Latest commit

 

History

History
236 lines (127 loc) · 4.63 KB

note_2016-03-03_12-43-50_git-memo.md

File metadata and controls

236 lines (127 loc) · 4.63 KB

Mémo GIT

Outil de diff

Voir https://github.com/dandavison/delta

Commande courantes

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

Corrections et annulations

Annuler les modifications sur un fichier:

$ git checkout nomfichier
$ git checkout numcommit nomfichier

Modifier un message de commit:

$ git commit --amend

Pousser vers un repository non-bare

/!\ Les copies de travail doivent être claires !

Sur le distant:

$ git config --local receive.denyCurrentBranch updateInstead

Squash

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

Rebase

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

Améliorations

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

Ressources

Pour un accés serveur multi voir ou pour plus d'infos voir:

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.

Statistiques

Avoir un résumé des commits:

$ sudo apt install git-extras
$ git-summary

Montrer les commits d'un utilisateur:

$ git log --author="j.doe" 

Sous modules

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 de dépôt

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

Configurations conditionnelles

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

Récupérer après un reset --hard

$ git reflog
$ git reset --hard SHA