Mon antisèche GIT
Git concepts
Les concepts sont plus importants que les commandes (en). Je ne cherche pas à apprendre par coeur toutes les commandes. Au lieu de ça, j’en fais des alias et j’essaie de focaliser sur la manière dont GIT fonctionne.
3 arbres
- le répertoire courant: les fichiers que vous modifiez
- l'index: les changement que vous enregistrez avec un
git add
pour le prochaingit commit
- le HEAD: une référence qui pointe vers le dernier commit sur la branche en cours et qui se déplace quand vous passez sur une autre branche
Local vs. Distant
Le répertoire local c'est grosso modo votre machine. Le dépot distant vous permet d'héberger le code et centraliser les modifications, par exemple, sur GitHub, GitLab, Bitbucket, etc. Chaque membre de l'équipe travaille sur son dépôt local et pousse les modifications vers le dépôt distant lorsqu'il a terminé.Clone, status, pull et push
git clone
est la première commande qu'on apprend. Elle permet de copier le dépôt distant où vous le souhaitez sur votre machine.git status
permet de savoir l'état GIT courant. À utiliser sans modération.git pull
incorpore les changements depuis le dépôt distant dans la branche courrante alors quegit push
met à jour le dépôt distant avec les référence locales.
Branches
La branche par défaut est main ou master. Vous pouvez créer de nouvelles branches pour dériver en toute sécurité de la branche principale. Lorsque vous avez terminé, vous pouvez fusionner la nouvelle branche dans la branche principale.Tags
Les tags sont des versions pour une branche à un moment précis.Fork
Copier un dépôt pour l'utiliser, expérimenter ou même y contribuer.Le merge vs. le rebase
Le but est le même : incorporer les modifications d'un côté vers l'autre. Le merge est relativement sûr car tout l'historique est conservé mais pmus verbeux. Le rebase est plus "propre" mais plus risqué car il linéarise les changements.Advanced commands
Utilisez les lignes de commandes pour les opérations complexes et je recommande d’en faire des alias pour éviter de s’encombrer l’esprit:
Amender une mauvais commit (BEFORE git push
)
git add {file} && git commit --amend
et si le message n'a pas besoin d'être modifié git add {file} && git commit --amend --no-edit
.
Sélectionner les modifications à ajouter ou enlever dans un même fichier pour le prochain commit
git add -p {file}
et git reset -p {file}
Incorporer des modifications depuis une autre branche sans merge ni rebase
git cherry-pick {commit_sha}
Annuler toutes les modifications en cours dans l'index (~ unadd)
git reset HEAD
Changer l'adresse du dépôt distant
Ne faîte pasgit remote rm origin && git remote add origin {URL}
. Lancez plutôt git remote set-url origin {URL}
.
Lister les fichiers ignorés
git ls-files --others -i --exclude-standard
Fusionner toutes les modifications mais les regrouper en un seul commit
git merge --squash {branch} && git commit
Éliminer à 100% un fichier dans l'historique GIT
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch .env" HEAD
Interfaces graphiques pour GIT
Soyez efficaces, ne gaspillez pas votre temps à taper les mêmes commandes sans arrêt dans le terminal. Les interfaces GIT ont vraiment du sens pour les opérations simples comme le clonage, le pull et le push, ou créer des nouvelles branches.
De plus, il n’est pas rare d’avoir à gérer des conflits, et vous ne devriez pas gérer des conflits sans interface graphiques à mon sens, car c’est source d’erreurs.
GitKraken
Un client simplement beau! Télécharger GitKrakenSmartGit
Un client moins graphique mais efficace Télécharger SmartGitSous-modules
Les sous-modules permettent d’inclure d’autres dépots GIT dans votre dépôt en tant que références. Lorsque vous ajoutez des sous-modules, un fichier .gitmodules
est créé à la racine.
Ajouter un sous-module
git submodule add {submodule_address} && git add {submodule_folder_path} && git commit
Cloner un projet avec ses sous-modules
Rien de plus quegit clone
qui le gère déjà. Toutefois, la première installation nécessitera un git submodule update --init --recursive
.
Mettre à jour les sous-modules
Lancezgit submodule update --remote --recursive
.
Supprimer un sous-module
Ne le faites pas manuellement! Lancez:git submodule deinit {submodule} && git rm {submodule_folder_path} && git commit
Configurations
GIT fonctionne avec une cascade de fichiers de configuration. Vous pouvez définir des configurations globales et écraser certains réglages localement pour un projet en particulier ou un groupe de projets.
Configuration globale
Vous pouvez éditer ~/.gitconfig ou lancer:git config --global --edit
. Il est possible d'avoir des .gitconfig locaux, par projet.
Liste globale des fichiers à ignorer
Modifiez ~/.gitignore_global. Vous pouvez aussi ajouter un fichier .gitignore par projet qui écrase la configuration globale.Git aliases
Les alias sont des raccourcis pour des commandes GIT. Vous pouvez modifier ~/.gitconfig ou lancer:git config --global --edit
, ou même les ajouter directement git config --global alias.st status
.