Alexandre Garnier @zigarn
Une compilation de trucs et astuces pour être encore plus efficace dans votre utilisation de Git au quotidien
Vous connaissez le cd -
?
~ $ cd /tmp
/tmp $ cd -
/home/alex
~ $ cd -
/tmp
/tmp $
Et bien vous avez la même chose en Git avec le checkout
:
$ git checkout master
Switched to branch 'master'
$ git checkout branch
Switched to branch 'branch'
$ git checkout -
Switched to branch 'master'
Marre d'avoir un diff indiquant un changement sur toute la ligne
-pour le changement d'un seul caractere ?
+pour le changement d'un seul caractère ?
Utilisez l'option --word-diff
:
Marre d'avoir un diff indiquant un changement sur toute la ligne
pour le changement d'un seul [-caractere-]{+caractère+} ?
Ou même l'option --word-diff-regex=.
:
Marre d'avoir un diff indiquant un changement sur toute la ligne
pour le changement d'un seul caract[-e-]{+è+}re ?
Une grosse astuce : toujours terminer vos fichiers par un saut de ligne.
-Dernière ligne de code.
\ No newline at end of file
+Dernière ligne de code.
+La vraie dernière ligne.
\ No newline at end of file
Dernière ligne de code.
+La vraie dernière ligne.
Vous avez aussi les options suivantes pour éviter les différences d'espaces :
--ignore-space-at-eol
--ignore-space-change
--ignore-all-space
diff.renames
--find-renames
qui va detecter les renommagesdiff.mnemonicPrefix
De la même manière que votre shell vous permet de définir des alias, git possède un système d'alias.
$ git config --global alias.st status
$ git config --global alias.ci commit
$ git config --global alias.co checkout
$ git config --global alias.glog log \
'log --graph --oneline --decorate --branches --tags --remotes'
$ git config --global alias.git '!git' # Commande système avec !
Un dernier pour la route ?
$ git config --global alias.lg \
"log --graph --abbrev-commit --date=relative
--pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s
%Cgreen(%cr) %C(bold blue)<%an>%Creset'"
Si vous avez des fichiers toujours dans votre status mais que vous ne voulez jamais commiter :
$ git update-index --skip-worktree README.md
Pour lister les fichiers dans cet état :
$ git ls-files -v | grep '^S'
S README.md
Revenir en arrière :
$ git update-index --no-skip-worktree README.md
Pour simplifier ces commandes :
[alias]
forget = update-index --skip-worktree
unforget = update-index --skip-worktree
forgotten = ! git ls-files -v | grep ^S
git bisect
vous permet de faire une dichotomie pour trouver le commit (et donc le code) ayant provoqué un bug.
git bisect
$ git bisect start HEAD GOOD
git bisect good
ou mauvais avec git bisect bad
Git conserve un historique de toutes vos modification du HEAD
via le reflog :
$ git reflog
3568a7f HEAD@{0}: checkout: moving from branch to master
f3e305e HEAD@{1}: checkout: moving from master to branch
3568a7f HEAD@{2}: checkout: moving from branch to master
f3e305e HEAD@{3}: checkout: moving from master to branch
3568a7f HEAD@{4}: commit: 4th commit
6c68d48 HEAD@{5}: commit: fixup! 2nd commit
e8353bb HEAD@{6}: commit: 3rd commit
Très pratique pour retrouver vos anciens commits après un commit --amend
ou un rebase
--grep 'regex'
-G 'regex'
--until
, --since
stash
__git_ps1*
ou un outil tel que git-prompt
#DevoxxFR