168 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			168 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| <!-- title: Les commandes de Git -->
 | ||
| 
 | ||
| # Git
 | ||
| 
 | ||
| Pousser nouvelle branche :
 | ||
| 
 | ||
|     git push -u origin <nom branche>
 | ||
| 
 | ||
| Lier branche locale à branche distante :
 | ||
| 
 | ||
|     git branch --set-upstream-to=origin/deployment deployment
 | ||
| 
 | ||
| Fusion sans fast-forward pour préserver les commits :
 | ||
| 
 | ||
|     git merge --no-ff <source branch>
 | ||
| 
 | ||
| Créer une nouvelle branche à partir d'un commit :
 | ||
| 
 | ||
|     git checkout <id de commit> && git branch -b <nom de la branche>
 | ||
| 
 | ||
| Annuler des changements :
 | ||
| 
 | ||
|     # committer l'annulation d'un commit : 
 | ||
|     git revert <id de commit>
 | ||
| 
 | ||
|     # restaurer l'état d'un fichier par rapport au dernier commit 
 | ||
|     git checkout -- <chemin du fichier>
 | ||
| 
 | ||
|     # annuler le dernier commit pour un fichier particulier (n° de checkout + ~1 pour reculer d'un commit)
 | ||
|     git checkout c5f567~1 -- file1/to/restore
 | ||
| 
 | ||
| Retrouver les branches qui contiennent un commit :
 | ||
| 
 | ||
|     git branch --contains <id de commit>
 | ||
| 
 | ||
| Récupérer toutes les branches localement :
 | ||
| 
 | ||
|     # ne pas récupérer les branches supprimées
 | ||
|     git fetch --prune
 | ||
| 
 | ||
|     # créer toutes les branches
 | ||
|     for BRANCH in $(git branch -a | grep remotes | grep -v HEAD); do git branch --track \"${BRANCH#remotes/origin/}\" \"${BRANCH}\"; done
 | ||
| 
 | ||
| Rechercher dans toutes les branches :
 | ||
| 
 | ||
|     git grep "the magic string" `git show-ref --heads`
 | ||
|     git rev-list –all | xargs git grep -F "the magic string"
 | ||
| 
 | ||
| La plupart des commandes peuvent être restreintes à un chemin de fichier :
 | ||
| 
 | ||
|     git stash push -- <filepath(s)>
 | ||
|     git diff <id commit 1> <id commit 2> -- <filepath(s)>
 | ||
| 
 | ||
| La gestion des stash :
 | ||
| 
 | ||
|     # voir le contenu d'un stash (0 est le plus récent)
 | ||
|     git stash show -p [stash@{<n>}]
 | ||
| 
 | ||
|     # appliquer un stash sans le supprimer
 | ||
|     git stash apply [stash@{<n>}]
 | ||
| 
 | ||
|     # mettre en stash les fichiers indexés en les conservant
 | ||
|     git stash push --keep-index -m "message"
 | ||
|  
 | ||
| 
 | ||
| Récupérer un fichier d'une autre branche :
 | ||
| 
 | ||
|     git checkout <branch> -- <path(s)>
 | ||
| 
 | ||
| Travailler sur plusieurs branches à la fois (pour comparer par exemple) :
 | ||
| 
 | ||
|     git worktree add ../my-other-awesome-feature my-other-awesome-feature-branch
 | ||
|     git worktree remove ../my-other-awesome-feature
 | ||
| 
 | ||
| Supprimer une branche distante
 | ||
| 
 | ||
|     git push origin --delete <remote_branch>
 | ||
| 
 | ||
| Lister les commits manquants sur la branche release par rapport à develop
 | ||
| 
 | ||
|     # depuis branche release
 | ||
|     git cherry develop
 | ||
|     git log release..develop
 | ||
|     # la version one-liner
 | ||
|     git log --oneline --graph --decorate --abbrev-commit release..develop
 | ||
| 
 | ||
| Créer un patch à partir du dernier commit 
 | ||
| 
 | ||
|     git format-patch -1 HEAD
 | ||
| 
 | ||
| Créer un patch à partir d'un id de commit
 | ||
| 
 | ||
|     git format-patch -1 <sha>
 | ||
| 
 | ||
| Créer un patch à partir d'une suite de commits consécutifs
 | ||
| 
 | ||
|     git format-patch cc1dde0dd^..6de6d4b06 --stdout > foo.patch
 | ||
| 
 | ||
| Extraire un diff d'un commit 
 | ||
| 
 | ||
|     git diff <sha>^ <sha> > stash.diff
 | ||
| 
 | ||
| Restaurer un fichier pendant une phase de merge
 | ||
| 
 | ||
|     git checkout -m FILE
 | ||
| 
 | ||
| Modifier l'historique des auteurs / e-mails avec git-filter-repo
 | ||
| 
 | ||
|     git filter-repo --mailmap my-mailmap
 | ||
| 
 | ||
|     # ficher my-mailmap de la forme : 
 | ||
|     # Proper Name <proper@email.xx> <commit@email.xx>
 | ||
| 
 | ||
| Créer un nouveau dépôt à partir de la ligne de commande
 | ||
| 
 | ||
|     echo "# test" >> README.md
 | ||
|     git init
 | ||
|     git add README.md
 | ||
|     git commit -m "first commit"
 | ||
|     git branch -M main
 | ||
|     git remote add origin git@github.com:user/project.git
 | ||
|     git push -u origin main
 | ||
| 
 | ||
| Pousser un dépôt existant depuis la ligne de commande
 | ||
| 
 | ||
|     git remote add origin git@github.com:user/projectgit
 | ||
|     git branch -M main
 | ||
|     git push -u origin main
 | ||
| 
 | ||
| Modifier la racine d'un dépôt
 | ||
| 
 | ||
| On peut modifier la racine pour un répertoire enfant sans perdre l'historique :
 | ||
| 
 | ||
| - déplacer le répertoire .git vers ce répertoire enfant
 | ||
| - ajouter tous les fichiers modifiés (git add) ce qui renomme les fichiers existants
 | ||
| - committer et pousser
 | ||
| 
 | ||
| Transformer un id long de commit en id court
 | ||
| 
 | ||
|     git rev-parse --short d40f13c5886a8f44e7653f68829dd094045a5499
 | ||
| 
 | ||
| Annuler un rebase avec reflog
 | ||
| 
 | ||
| ```
 | ||
| $ git reflog
 | ||
| 
 | ||
| b710729 HEAD@{0}: rebase: some commit
 | ||
| 5ad7c1c HEAD@{1}: rebase: another commit
 | ||
| deafcbf HEAD@{2}: checkout: moving from master to my-branch
 | ||
| ...
 | ||
| 
 | ||
| $ git reset HEAD@{2} --hard
 | ||
| ```
 | ||
| 
 | ||
| 
 | ||
| # GitHub
 | ||
| 
 | ||
| Générer un Personal Access Token pour les accès HTTPS
 | ||
| 
 | ||
|     git config --global credential.https://github.com.helper cache
 | ||
| 
 | ||
|     git credential approve <<EOF
 | ||
|     protocol=https
 | ||
|     host=github.com
 | ||
|     username=$GITHUB_USERNAME
 | ||
|     password=$GITHUB_TOKEN
 | ||
|     EOF
 | ||
| 
 | 
