Ceci est une ancienne révision du document !
Table des matières
Notes GIT
Voir :
Voir aussi :
Clients graphiques :
- gitg
- gitk
- qgit
- tig (console)
- git-cola
Basic
Voir :
- Oh My Git!
Git
Undo uncommited
git checkout -f
will remove any non-committed changes.
Par exemple pour annuler un pb de merge
Undo commit
IF you have NOT pushed your changes to remote
git reset HEAD~1
Check if the working copy is clean by git status
ELSE you have pushed your changes to remote
git revert --no-commit HEAD
This command will revert/remove the local commits/change and then you can push
Revert multiple commits
git log --oneline
A <-- B <-- C <-- D <-- master <-- HEAD
git revert --no-commit D git revert --no-commit C git revert --no-commit B git commit -m "the commit message for all of them"
ou
git reset --hard A git reset --soft D # (or ORIG_HEAD or @{1} [previous location of HEAD]), all of which are D git commit
ou
git revert --no-commit HEAD~3.. git revert master~3..master # Revert all commits from and including B to HEAD, inclusively git revert --no-commit B^..HEAD git commit -m 'message'
ou
git reset --hard <hash> git push -f
check before git push
#git diff --stat --cached [remote/branch] git diff --stat --cached origin/master
or
git push --dry-run
For the code diff of the files to be pushed, run:
git diff [remote repo/branch]
To see full file paths of the files that will change, run:
git diff --numstat [remote repo/branch]
Git workflow
Voir :
- Git-flow
Configurer son environnement
- ~/.bashrc
export PS1='\u@\h:\w$(__git_ps1) \$ ' export GIT_PS1_SHOWDIRTYSTATE=1 GIT_PS1_SHOWSTASHSTATE=1 GIT_PS1_SHOWUNTRACKEDFILES=1 export GIT_PS1_SHOWUPSTREAM=verbose GIT_PS1_DESCRIBE_STYLE=branch
git config --global status.submoduleSummary true
Create a new repository on the command line
touch README.md git init git add README.md git commit -m "first commit" git remote add origin git@git.acme.fr:jean/docker-dokuwiki.git git push -u origin master
Push an existing repository from the command line
git remote add origin git@git.acme.fr:jean/docker-dokuwiki.git git push -u origin master
Change remote location
git remote set-url ssh://gogs@new.acme.fr/user/projet git remote set-url origin ssh://git@new.acme.fr/user/projet ssh://git@old.acme.fr/user/projet git remote set-url --push origin ssh://git@new.acme.fr/user/projet
Branches et merge
Créer une nouvelle branche locale
# Créer la branch git branch bugfix1 # Travailler dans la branch spécifiée git checkout bugfix1
ou
git checkout -b bugfix1
Checkout a remote Git branch
$ git fetch $ git branch -v -a ... remotes/origin/dev $ git checkout dev
By using the --track parameter, you can use a remote branch as the basis for a new local branch; this will also set up a “tracking relationship” between the two:
git checkout -b new-branch --track origin/develop
git add plop git commit -m “+ plop”
Commiter la nouvelle branche / créer une branche distante
git push --set-upstream origin bugfix1
Revenir à la branche master
git checkout master
Clonner une branche spécifique
git clone -b bugfix1 https://gogs.belaris.fr/BELARIS/test01
git reflog avec date
git reflog --date=iso git reflog --pretty=short --date=iso
Merge without autocommit
git merge mabranch --no-commit --no-ff #ou git merge mabranch --squash
Merge - rebase
Voir
Merge vs Merge : https://git-flow.readthedocs.io/fr/latest/presentation.html
git pull --rebase
Ou pour configurer le rebase par défaut après un pull
git config --global pull.rebase true
Si conflits
git add plop git rebase --continue
Si trop compliqué annuler :
git rebase --abort
Annuler un merge
Jetez un oeil
git reflog --date=iso # ou git log -g
Puis
git reset --hard <commit_before_merge> # Retour au commit précedent git reset --hard HEAD~1 #Ou pour une branche git reset --hard origin/mabranch
Autre
Connaître la version du dépôt - Current version
git describe --tags
Log history
git log --oneline --graph --color --all --decorate
Autres
git push warning: push.default n'est pas défini ; sa valeur implicite a changé dans Git 2.0 de 'matching' vers 'simple'. Pour supprimer ce message et maintenir le comportement actuel après la modification de la valeur de défaut, utilisez : git config --global push.default matching Pour supprimer ce message et adopter le nouveau comportement maintenant, utilisez : git config --global push.default simple Quand push.default vaudra 'matching', git poussera les branches locales sur les branches distantes qui existent déjà avec le même nom. Depuis Git 2.0, Git utilise par défaut le comportement plus conservatif 'simple' qui ne pousse la branche courante que vers la branche distante correspondante que 'git pull' utilise pour mettre à jour la branche courante. Voir 'git help config' et chercher 'push.default' pour plus d'information. (le mode 'simple' a été introduit dans Git 1.7.11. Utilisez le mode similaire 'current' au lieu de 'simple' si vous utilisez de temps en temps d'anciennes versions de Git)
warning: Pulling without specifying how to reconcile divergent branches is discouraged. You can squelch this message by running one of the following commands sometime before your next pull: git config pull.rebase false # merge (the default strategy) git config pull.rebase true # rebase git config pull.ff only # fast-forward only You can replace "git config" with "git config --global" to set a default preference for all repositories. You can also pass --rebase, --no-rebase, or --ff-only on the command line to override the configured default per invocation.
https://www.grafikart.fr/tutoriels/checkout-revert-reset-586 https://www.youtube.com/watch?v=rP3T0Ee6pLU&feature=emb_rel_end
https://www.youtube.com/watch?v=2zAtE4hnBao&list=PLtAnN3kwIVucWlr1pyfnmw8qCNaq0tusi&index=2
https://ohshitgit.com/ https://perso.liris.cnrs.fr/pierre-antoine.champin/enseignement/intro-git/ https://rogerdudler.github.io/git-guide/index.fr.html
https://delicious-insights.com/fr/articles/bien-utiliser-git-merge-et-rebase/ git pull --rebase git rebase origin/master
postconf -e smtpd_client_restrictions='permit_mynetworks, check_client_access hash:/etc/postfix/client_checks, check_sender_access hash:/etc/postfix/sender_checks'
dontreply@mass.datingfactory.com
https://www.miximum.fr/blog/enfin-comprendre-git/ https://www.miximum.fr/blog/git-rebase/
Les branches https://git-scm.com/book/fr/v2/Les-branches-avec-Git-Les-branches-en-bref https://git-scm.com/book/fr/v2/Les-branches-avec-Git-Branches-et-fusions%C2%A0%3A-les-bases
RESET https://www.atlassian.com/fr/git/tutorials/undoing-changes https://makina-corpus.com/blog/metier/archives/git-annuler-proprement-un-commit-apres-un-push https://alexgirard.com/git-book/intermediaire/repair-reset-checkout-revert/ https://opensource.com/article/18/6/git-reset-revert-rebase-commands https://docs.gitlab.com/ee/university/training/topics/rollback_commits.html
STASH https://git-scm.com/book/fr/v2/Utilitaires-Git-Remisage-et-nettoyage
REBASE https://openclassrooms.com/fr/courses/5641721-utilisez-git-et-github-pour-vos-projets-de-developpement/6113081-modifiez-vos-branches-avec-rebase https://riptutorial.com/fr/git/example/3282/rebase-interactif https://delicious-insights.com/fr/articles/bien-utiliser-git-merge-et-rebase/
Un git pull revient à
git fetchgit merge
git add . # Idem mais en plus inclus des supression git add --all
undo git add
git reset HEAD -- plop # ou git reset -- plop # ou git rm --cached plop #Suprimer le stagging git reset
Status
git status -s
Git log pour toutes les branches locales
git reflog git log --all
Historique des modifications pour un fichier précis.
git log --oneline -p README.md
Information sur un commit précis
git show 3717
Modifier le dernier message du commit
git commit --amend
Diff de la branche avec master
git diff origin/master
Annuler proprement un commit sans altérer l'historique des commits
git revert --no-commit 55dbdf
Une alternative
git checkout <commit hash> git checkout -b new_branch_name
Autre une alternative Normalement ne marche que dans une branche. Permet de changer l'history, de squash, effacer…
git rebase -i HEAD~3
Rejouer un commit spécifique / undo git revert
git cherry-pick 55dbdf
Effacer une branche distante
git push origin --delete branchy
Plop
git checkout master git pull origin master git checkout my-branch git merge master
submodule
Voir https://delicious-insights.com/fr/articles/git-submodules/ Git subtree: une alternative à Git submodule
git clone git@acme.fr:toto/plop.git cd plop git submodule update --init --recursive # Ou git clone --recurse-submodules git@acme.fr:toto/plop.git
Mise à jour submodule
git submodule update module/ cd module git pull origin master
Si commit par erreur d'un submodule
git submodule update --force
Affichage plus explicite de la commande git status
git config --global status.submoduleSummary true
Mise à jour - faire pointer le submodule sur la branche master
git submodule foreach git pull origin master
Avec Gitlab CI Voir : https://docs.gitlab.com/ee/ci/git_submodules.html
- .gitlab-ci.yml
variables: GIT_SUBMODULE_STRATEGY: recursive
Autres
Lol / Lola
git config --global alias.lol "log --graph --decorate --pretty=oneline --abbrev-commit" git config --global alias.lola "log --graph --decorate --pretty=oneline --abbrev-commit --all"
clone --depth 1 $URL fetch --unshallow $URL
Python
Voir aussi :
- pygit2
- reuirements.txt
GitPython
#! /usr/bin/python3 import os import urllib.parse from git import Repo mdp=urllib.parse.quote('P@ssw0rd!', safe='') if os.path.isdir('/tmp/clone'): repo = Repo('/tmp/clone') repo.remotes.origin.pull() else: repo = Repo.clone_from(f'https://user1:{mdp}@git.acme.local/user1/test01.git', '/tmp/clone', depth=1) repo.index.add('plop.txt') repo.index.commit('commit msg') #origin = repo.remotes[0] #origin = repo.remotes['origin'] origin = repo.remotes.origin origin.push()
Pb
pb git reset --hard ne fonctionne pas
Solution
Utiliser git checkout HEAD
#git reset --hard vars/phy-deb9-fr.var git checkout HEAD vars/phy-deb9-fr.var
Err: unknown revision or path not in the working tree.
$ git reset preseed/kvm-deb10.cfg vars/netinst-deb8-11.var fatal: ambiguous argument 'preseed/kvm-deb10.cfg': unknown revision or path not in the working tree. Use '--' to separate paths from revisions, like this: 'git <command> [<revision>...] -- [<yourcode>...]'
Solution
git checkout HEAD -- vars/kvm-deb10.var preseed/kvm-deb10.cfg
Pb git diff et git difftool ne fonctionne pas
Solution
Utiliser l'option --cached
git difftool --cached
Ou encore
git difftool HEAD
