Git

1/ Les basics :

Pour cloner un dépot : git clone https://xxxxxxxxx

Pour ajouter une modification : git add rep1/monFichier.xxx

Pour ajouter toutes les modifications : git add -A

Pour annuler les ADD : git reset

Pour annuler le ADD d’un fichier : git reset rep1/monFichier.xxx

Pour annuler les modifications d’un fichier : git checkout rep1/monFichier.xxx

Pour commiter : git commit -m "mon message"

Pour commiter les fichiers modifiés (pas les ajouts) sans faire de ADD : git commit -am "mon message"

Pour pousser ces commits sur le repository : git push

Pour récupérer toutes les modifications réalisées depuis le dernier PULL : git pullou git pull --rebasesi des commits ont été réalisés depuis le dernier PULL

En cas de problème durant un rebase, la commande git rebase --abortannule tout.

2/ Les utilitaires :

Pour voir le statut du dépot local : git status

Pour voir les modifications d’un fichier : git diff rep1/monFichier.xxx

Pour voir toutes les modifications : git diff

Pour obtenir les logs : git logou git log --pretty=oneline

Pour afficher les informations du repository distant : git remote show origin

Pour sauvegarder dans un espace temporaire des modifications (sans les commiter) : git stash

Pour lister les sauvegardes : git stash list

Pour récupérer la sauvegarde la plus récente : git stash pop

Pour annuler tous les commits locaux : git reset HEAD^

3/ La manipulation d’historique

3.1/ squash & rename :

Pour modifier l’historique sur les 5 derniers commits (à ne faire que si aucun push n’a été fait depuis) : git rebase --interactive HEAD~5

Dans l’éditeur qui s’ouvre, remplacer les pick par :

  • r pour reword afin de modifier le message du commit (le nouveau message est à saisir après avoir sauvegarder ce premier éditeur de texte)
  • s pour squash permet de fusionner le commit avec celui qui le précède dans le temps (et fusionne les commentaires des deux commits)
  • f pour fixup qui fusionne comme le squash mais qui supprime le commentaire

Pour pousser sur le repository distant un rebase qui modifie l’historique déjà poussé /!\ attention quand on travaille en équipe /!\ : git push --force

3.2/ La manipulation d’historique - author :

Pour modifier l’auteur des commits d’un dépôt, il est possible d’utiliser la commande suivante :

git filter-branch -f --env-filter "
    GIT_AUTHOR_NAME='Guillaume TALBOT'
    GIT_AUTHOR_EMAIL='talbotgui@gmail.com'
    GIT_COMMITTER_NAME='Guillaume TALBOT'
    GIT_COMMITTER_EMAIL='talbotgui@gmail.com'
  " HEAD

Mais, ensuite, il ne faut pas oublier de modifier l’auteur dans le dépôt (pour ne pas recommencer la même erreur) :

git config user.name "Guillaume TALBOT"
git config user.email "talbotgui@gmail.com"

4/ La manipulation de branches :

Pour lister les branches locales : git branch

Pour passer d’une branche à l’autre : git checkout maBranche

Pour créer et passer à une autre branche : git checkout -b maBranche

Pour supprimer une branche : git branch -d maBranche

Pour afficher les différences entre deux branches : git dif maBranche...lAutreBranche

Pour fusionner simplement une branche vers la branche courante : git merge monAutreBranche

Pour pousser dans le master les modifications d’une autre branche en un seul commit :

git checkout master
git merge --no-ff maBrancheFeature

Pour pousser sur le dépot distant toutes les branches : git push --all

Pour lier une branche locale à une branche distante existante (après avoir fait un push -all créant une branche par exemple) : git branch --set-upstream-to origin/maBranche

5/ Ajouter un outil de DIFF pour les documents Microsoft Office

  • Ajouter les lignes suivantes dans le fichier .gitconfig (vi ~/.gitconfig depuis une console gitbash) :
[diff]
  tool = pdiff
[difftool "pdiff"]
  cmd="wscript.exe \"c:\\Program Files\\TortoiseSVN\\Diff-Scripts\\diff-ppt.js\" \"`pwd`/$REMOTE\" \"$LOCAL\""
  • Pour tester, exécuter la commande : git difftool -Y -t pdiff maPresentation.pptx
  • Ajouter un alias pour appeler ce diff (dans la liste des alias existante si besoin) :
[alias]
    diffP = difftool -Y -t pdiff
  • Pour tester cet alias : git diffP maPresentation.pptx

6/ Ajouter deux scripts (avec alias) pour activer/désactiver un proxy

  • Placer le script suivant dans le script setGitConfigProxy.sh dans le répertoire d’installation de GIT
git config --global http.proxy http://mon.proxy:8080
git config --global https.proxy https://mon.proxy:8080
  • Placer le script suivant dans le script unsetGitConfigProxy.sh dans le répertoire d’installation de GIT
git config --global --unset http.proxy
git config --global --unset https.proxy
  • Exécuter les commandes suivantes :
git config --global alias.setProxy '!sh $GIT_EXEC_PATH/../../../setGitConfigProxy.sh'
git config --global alias.unsetProxy '!sh $GIT_EXEC_PATH/../../../unsetGitConfigProxy.sh'
  • Pour manipuler le proxy pour NPM et MAVEN depuis ces scripts, il suffit d’ajouter les lignes suivantes :
# setGitConfigProxy.sh
# Proxy pour GIT
git config --global --unset http.proxy
git config --global --unset https.proxy

# Proxy pour NPM
npm config rm proxy
npm config rm https-proxy

# Proxy pour MAVEN
sed "s/active>true/active>false/" -i C:/outils/apache-maven-3.5.2/conf/settings.xml```
# unsetGitConfigProxy.sh
# Proxy pour GIT
git config --global http.proxy https://mon.proxy:8080
git config --global https.proxy https://mon.proxy:8080

# Proxy pour NPM
npm config set proxy https://mon.proxy:8080
npm config set https-proxy https://mon.proxy:8080

# Proxy pour MAVEN
sed "s/active>false/active>true/" -i C:/outils/apache-maven-3.5.2/conf/settings.xml

7/ Articles utiles :