User Tools

Site Tools


projtec:git

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
projtec:git [2019/04/02 14:02] – [Les branches locales et distantes] nikoprojtec:git [2024/03/18 15:06] (current) – external edit 127.0.0.1
Line 25: Line 25:
 # mail / user name # mail / user name
 git config --global user.name "orel" git config --global user.name "orel"
-git config --global user.mail aurelien.esnard@u-bordeaux.fr+git config --global user.email aurelien.esnard@u-bordeaux.fr
 # editeur de texte # editeur de texte
 git config --global core.editor emacs git config --global core.editor emacs
Line 201: Line 201:
 </code> </code>
  
-Nous sommes encore dans la branche //master// comme l'indique "*". Passons dans la branche //hotfix// et corrigeons le bug... +Nous sommes encore dans la branche //master// comme l'indique "*". Passons dans la branche //hotfix// :
 <code bash> <code bash>
-git checkout hotfix+git switch hotfix
 git branch  git branch 
 * hotfix * hotfix
   master   master
 +</code>
 +
 +Regardons l'état du dépôt : 
 +<code bash>
 +git log --graph --oneline
 +* c908469 (HEAD -> hotfix, origin/master, origin/HEAD, master) bla bla
 +* d144ffa autre bla bla
 +(...)
 +</code>
 +
 +Le dernier commit est bien commun à la branch hotfix, la branch master. Corrigeons le "bug" maintenant :
 +
 +<code bash>
 date >> date.txt date >> date.txt
 git add date.txt git add date.txt
Line 213: Line 225:
 </code> </code>
  
-Une fois le bug corrigé, nous pouvons le commiter dans la branche courante //hotfix//. Notons que cela n'a aucun impact sur la branche //master//. Pour propager cette modification vers la branche //master//, il va falloir repasser dans la branche //master// et effectuer un //merge//.+Une fois le bug corrigé, nous pouvons le commiter dans la branche courante //hotfix//. Notons que cela n'a aucun impact sur la branche //master//:
  
 <code bash> <code bash>
-git checkout master+git log --graph --oneline 
 +* c38c81a (HEAD -> hotfix) deux dates dans hotfix 
 +* c908469 (origin/master, origin/HEAD, master) bla bla 
 +* d144ffa autre bla bla 
 +(...) 
 +</code> 
 + 
 +Pour propager cette modification vers la branche //master//, il va falloir repasser dans la branche //master//, faire quelques modifs sur master puis effectuer un //merge//
 + 
 +<code bash> 
 +git switch master 
 +date >> date2.txt 
 +git add date2.txt 
 +git commit -m "date2.txt"
 git merge hotfix git merge hotfix
 </code> </code>
  
-On peut finalement supprimer la branche quand cette dernière n'est plus utile.+<code bash> 
 +git log --graph --oneline 
 +*   36db317 (HEAD -> master) Merge branch 'hotfix' 
 +|\   
 +| * c38c81a (hotfix) deux dates dans hotfix 
 +|/   
 +* c908469 bla bla 
 +* d144ffa autre bla bla 
 +</code>
  
-  git branch -hotfix+Pour propager ces modifications dans le dépôt distant on fera des pull/push comme d'habitude.
  
-Si l'on souhaite que sa branche locale //mybranch// deviennent une branche distante (ou "remote") : 
  
-  git checkout mybranch +Si l'on souhaite que sa branche locale //hotfix// deviennent une branche distante (ou "remote") :
-  git push --set-upstream origin mybranch     +
-  +
  
-Pour voir toutes les branches (locales et distantes:+<code bash> 
 +  git log --graph --oneline 
 +    * c38c81a (HEAD -> hotfixdeux dates dans hotfix 
 +    * c908469 bla bla 
 +    * d144ffa autre bla bla 
 +    (...) 
 +  git switch hotfix 
 +  git push --set-upstream origin hotfix 
 +  git log --graph --oneline 
 +    * c38c81a (HEAD -> hotfix, origin/hotfix) deux dates dans hotfix 
 +    * c908469 bla bla 
 +    * d144ffa autre bla bla 
 +    (...) 
 +</code>
  
 +La encore on se synchronisera avec la branche distance à l'aide des commandes push/pull:
 +
 +<code bash>
 +  date >> date.txt
 +  git add date.txt
 +  git commit -m "mise à jour de la date"
 +  git log --graph --oneline
 +    * 68b1978 (HEAD -> hotfix) mise à jour de la date
 +    * c38c81a (origin/hotfix) deux dates dans hotfix
 +    (...)
 +  git push
 +  git log --graph --oneline
 +    * 68b1978 (HEAD -> hotfix, origin/hotfix) mise à jour de la date
 +    * c38c81a deux dates dans hotfix
 +    (...) 
 +</code>
 +
 +
 +Pour voir toutes les branches (locales et distantes) :
 +<code bash>
   git fetch -p   git fetch -p
   git branch -a   git branch -a
 +</code>
      
 __Nota Bene__ : le //fetch// permet de mettre à jour son cache local et éventuellement (option -p) d'effacer dans ce cache les références à des branches mortes ! __Nota Bene__ : le //fetch// permet de mettre à jour son cache local et éventuellement (option -p) d'effacer dans ce cache les références à des branches mortes !
      
-Pour récupérer une branche distante et la suivre via une branche locale : 
  
-  git checkout --track origin/mybranch+Puis pour supprimer la branche locale, il faut faire ceci :   
 +<code bash> 
 +  git branch -d mybranch 
 +</code>
  
-Puis pour supprimer la branche distante (enfin presque...), il faut faire ceci :   
  
 +Puis pour supprimer la branche distante (enfin presque...), il faut faire ceci :  
 +<code bash>
   git push origin --delete mybranch   git push origin --delete mybranch
-   +</code>  
-Expliquer le //rebase// simple :+
  
-  git checkout mybranch +Pour récupérer une branche distante et la suivre via une branche locale : 
-  git rebase master +<code bash> 
-  git checkout master +  git checkout --track origin/mybranch 
-  git merge mybranch+</code> 
 + 
 +Considérons le cas suivant... Expliquer ensuite le //rebase// simple : 
 + 
 +<code bash> 
 +  git switch mybranch 
 +  git rebase master        #  
 +  git switch master 
 +  git merge mybranch       # merge naif
   git branch -d mybranch   git branch -d mybranch
 +</code>
  
 Pour aller plus loin : Pour aller plus loin :
Line 376: Line 451:
  
 L'idée c'est que le .git/ n'est pas dupliqué ! L'idée c'est que le .git/ n'est pas dupliqué !
 +
 +=== Suppression d'une Branche Distante ====
 +
 +Pour supprimer une branche locale sur votre ordinateur, la commande est la suivante :
 +
 +  $ git branch -d [nom_de_la_branche]
 + 
 +Ou bien : 
 +
 +  $ git branch -D [nom_de_la_branche]
 +
 +Pour supprimer la branche située sur le dépôt distant (syntaxe récente) :
 +
 +  $ git push origin --delete [nom_de_la_branche]
 +
 +Pour mettre à jour les changements sur un autre ordinateur, il faut faire :
 +
 +  $ git fetch --all -prune
 +
 +=> https://www.journaldunet.fr/web-tech/developpement/1202943-effacer-une-branche-git-a-la-fois-locale-et-distante/
 +==== Suppression de Commit Fautifs sur le dépôt distant ====
 +
 +Revenir à l'état désiré : 
 +
 +  $ git reset --hard <commit hash>
 +
 +Forcer cet état comme le dernier état du dépôt :
 +
 +  $ git push --force origin master
 +  
 +Attention : Ces commandes sont susceptibles d'engendrer le chaos lorsque plusieurs utilisateurs collaborent sur le même dépôt. https://makandracards.com/git/7347-supprimer-des-commits-fautifs-avec-git
 ==== Savane ==== ==== Savane ====
  
Line 394: Line 500:
 ==== A Lire ==== ==== A Lire ====
  
 +  * https://gitlab-ce.iut.u-bordeaux.fr/Pierre/DEMO-GIT-PT2
 +  * https://marklodato.github.io/visual-git-guide/index-en.html
   * https://help.github.com/articles/syncing-a-fork/   * https://help.github.com/articles/syncing-a-fork/
   * http://nvie.com/posts/a-successful-git-branching-model/   * http://nvie.com/posts/a-successful-git-branching-model/
Line 400: Line 508:
   * https://yakiloo.com/getting-started-git-flow/   * https://yakiloo.com/getting-started-git-flow/
   * https://git-man-page-generator.lokaltog.net/   * https://git-man-page-generator.lokaltog.net/
 +  * https://thor.enseirb-matmeca.fr/ruby/docs/repository/git
projtec/git.1554213777.txt.gz · Last modified: 2024/03/18 15:05 (external edit)