Création de branche avec git

Sommaire

Index

Création de branche

Exemple de création de branche

user@machine  tstn1-22-23 (tstn1-22-23)
$ mkdir demo
user@machine  tstn1-22-23 (tstn1-22-23)
$ cd demo
user@machine  demo (tstn1-22-23)
$ git init
Dépôt Git vide initialisé dans demo/.git/
user@machine  demo (master)
$ echo "# Dépôt démonstration" > README.md
user@machine  demo (master)
$ cat README.md 
# Dépôt démonstration
user@machine  demo (master)
$ echo "# Dépôt démonstration TSTN1" > README.md
user@machine  demo (master)
$ cat README.md 
# Dépôt démonstration TSTN1
user@machine  demo (master)
$ echo "Deuxième ligne" >> README.md
user@machine  demo (master)
$ cat README.md 
# Dépôt démonstration TSTN1
Deuxième ligne
user@machine  demo (master)
$ 
user@machine  demo (master)
$ 
user@machine  demo (master)
$ 
user@machine  demo (master)
$ 
user@machine  demo (master)
$ 
user@machine  demo (master)
$ git status
Sur la branche master

Aucun commit

Fichiers non suivis:
  (utilisez "git add <fichier>..." pour inclure dans ce qui sera validé)
    README.md

aucune modification ajoutée à la validation mais des fichiers non suivis sont présents (utilisez "git add" pour les suivre)
user@machine  demo (master)
$ git add README.md
user@machine  demo (master)
$ git status
Sur la branche master

Aucun commit

Modifications qui seront validées :
  (utilisez "git rm --cached <fichier>..." pour désindexer)
    nouveau fichier : README.md

user@machine  demo (master)
$ 
user@machine  demo (master)
$ 
user@machine  demo (master)
$ 
user@machine  demo (master)
$ 
user@machine  demo (master)
$ 
user@machine  demo (master)
$ git commit -m "initial commit"
[master (commit racine) 62f5d06] initial commit
 1 file changed, 2 insertions(+)
 create mode 100644 README.md
user@machine  demo (master)
$ git status
Sur la branche master
rien à valider, la copie de travail est propre
user@machine  demo (master)
$ git log
commit 62f5d0601aed78474dc9fc2db5c4f133728f0a3c (HEAD -> master)
Author: lauhub <lau.hub@gmail.com>
Date:   Mon Jun 19 09:01:47 2023 +0200

    initial commit
user@machine  demo (master)
$ echo "Documentation Linux" > linux.txt
user@machine  demo (master)
$ git status
Sur la branche master
Fichiers non suivis:
  (utilisez "git add <fichier>..." pour inclure dans ce qui sera validé)
    linux.txt

aucune modification ajoutée à la validation mais des fichiers non suivis sont présents (utilisez "git add" pour les suivre)
user@machine  demo (master)
$ git add linux.txt
user@machine  demo (master)
$ git commit -m "Ajout documentation"
[master 9544f8e] Ajout documentation
 1 file changed, 1 insertion(+)
 create mode 100644 linux.txt
user@machine  demo (master)
$ 
user@machine  demo (master)
$ git status
Sur la branche master
rien à valider, la copie de travail est propre
user@machine  demo (master)
$ git log
commit 9544f8e445a2258e9a595d01e8f85a9d44440ed7 (HEAD -> master)
Author: lauhub <lau.hub@gmail.com>
Date:   Mon Jun 19 09:03:08 2023 +0200

    Ajout documentation

commit 62f5d0601aed78474dc9fc2db5c4f133728f0a3c
Author: lauhub <lau.hub@gmail.com>
Date:   Mon Jun 19 09:01:47 2023 +0200

    initial commit
user@machine  demo (master)
$ git tag v1_0
user@machine  demo (master)
$ git log
commit 9544f8e445a2258e9a595d01e8f85a9d44440ed7 (HEAD -> master, tag: v1_0)
Author: lauhub <lau.hub@gmail.com>
Date:   Mon Jun 19 09:03:08 2023 +0200

    Ajout documentation

commit 62f5d0601aed78474dc9fc2db5c4f133728f0a3c
Author: lauhub <lau.hub@gmail.com>
Date:   Mon Jun 19 09:01:47 2023 +0200

    initial commit
user@machine  demo (master)
$ 
user@machine  demo (master)
$ echo programme.c
programme.c
user@machine  demo (master)
$ nano programme.c
user@machine  demo (master)
$ git status
Sur la branche master
Fichiers non suivis:
  (utilisez "git add <fichier>..." pour inclure dans ce qui sera validé)
    programme.c

aucune modification ajoutée à la validation mais des fichiers non suivis sont présents (utilisez "git add" pour les suivre)
user@machine  demo (master)
$ git add programme.c
user@machine  demo (master)
$ git commit -m "Version en cours de développement"
[master edecf70] Version en cours de développement
 1 file changed, 14 insertions(+)
 create mode 100644 programme.c
user@machine  demo (master)
$ 


user@machine  demo (master)
$ git log
commit edecf7025f7af2302e826b3b153781c41c370d6c (HEAD -> master)
Author: lauhub <lau.hub@gmail.com>
Date:   Mon Jun 19 09:06:39 2023 +0200

    Version en cours de développement

commit 9544f8e445a2258e9a595d01e8f85a9d44440ed7 (tag: v1_0)
Author: lauhub <lau.hub@gmail.com>
Date:   Mon Jun 19 09:03:08 2023 +0200

    Ajout documentation

commit 62f5d0601aed78474dc9fc2db5c4f133728f0a3c
Author: lauhub <lau.hub@gmail.com>
Date:   Mon Jun 19 09:01:47 2023 +0200

    initial commit
user@machine  demo (master)
$ 




user@machine  demo (master)
$ git checkout v1_0 
Note : basculement sur 'v1_0'.

Vous êtes dans l'état « HEAD détachée ». Vous pouvez visiter, faire des modifications
expérimentales et les valider. Il vous suffit de faire un autre basculement pour
abandonner les commits que vous faites dans cet état sans impacter les autres branches

Si vous voulez créer une nouvelle branche pour conserver les commits que vous créez,
il vous suffit d'utiliser l'option -c de la commande switch comme ceci :

  git switch -c <nom-de-la-nouvelle-branche>

Ou annuler cette opération avec :

  git switch -

Désactivez ce conseil en renseignant la variable de configuration advice.detachedHead à false

HEAD est maintenant sur 9544f8e Ajout documentation
user@machine  demo ((v1_0))
$ 
user@machine  demo ((v1_0))
$ git branch
* (HEAD détachée sur v1_0)
  master
user@machine  demo ((v1_0))
$ git branch bug857
user@machine  demo ((v1_0))
$ git checkout bug857 
Basculement sur la branche 'bug857'
user@machine  demo (bug857)
$ git status
Sur la branche bug857
rien à valider, la copie de travail est propre
user@machine  demo (bug857)
$ ll
total 16
-rw-r--r--  1 lauhub  staff  47 19 jui 09:00 README.md
-rw-r--r--  1 lauhub  staff  20 19 jui 09:02 linux.txt
user@machine  demo (bug857)
$ nano linux.txt 
user@machine  demo (bug857)
$ git status
Sur la branche bug857
Modifications qui ne seront pas validées :
  (utilisez "git add <fichier>..." pour mettre à jour ce qui sera validé)
  (utilisez "git restore <fichier>..." pour annuler les modifications dans le répertoire de travail)
    modifié :         linux.txt

aucune modification n'a été ajoutée à la validation (utilisez "git add" ou "git commit -a")
user@machine  demo (bug857)
$ 
user@machine  demo (bug857)
$ git status
Sur la branche bug857
Modifications qui ne seront pas validées :
  (utilisez "git add <fichier>..." pour mettre à jour ce qui sera validé)
  (utilisez "git restore <fichier>..." pour annuler les modifications dans le répertoire de travail)
    modifié :         linux.txt

aucune modification n'a été ajoutée à la validation (utilisez "git add" ou "git commit -a")
user@machine  demo (bug857)
$ git mv linux.txt linux.md
user@machine  demo (bug857)
$ git status
Sur la branche bug857
Modifications qui seront validées :
  (utilisez "git restore --staged <fichier>..." pour désindexer)
    renommé :         linux.txt -> linux.md

Modifications qui ne seront pas validées :
  (utilisez "git add <fichier>..." pour mettre à jour ce qui sera validé)
  (utilisez "git restore <fichier>..." pour annuler les modifications dans le répertoire de travail)
    modifié :         linux.md

user@machine  demo (bug857)
$ git add linux.md
user@machine  demo (bug857)
$ git status
Sur la branche bug857
Modifications qui seront validées :
  (utilisez "git restore --staged <fichier>..." pour désindexer)
    nouveau fichier : linux.md
    supprimé :        linux.txt

user@machine  demo (bug857)
$ git commit -m "Correction bug 857"
[bug857 da033f6] Correction bug 857
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 linux.md
 delete mode 100644 linux.txt
user@machine  demo (bug857)
$ git status
Sur la branche bug857
rien à valider, la copie de travail est propre
user@machine  demo (bug857)
$ git log
commit da033f69b241169143958caa7b10309cc5dc29e5 (HEAD -> bug857)
Author: lauhub <lau.hub@gmail.com>
Date:   Mon Jun 19 09:25:20 2023 +0200

    Correction bug 857

commit 9544f8e445a2258e9a595d01e8f85a9d44440ed7 (tag: v1_0)
Author: lauhub <lau.hub@gmail.com>
Date:   Mon Jun 19 09:03:08 2023 +0200

    Ajout documentation

commit 62f5d0601aed78474dc9fc2db5c4f133728f0a3c
Author: lauhub <lau.hub@gmail.com>
Date:   Mon Jun 19 09:01:47 2023 +0200

    initial commit
user@machine  demo (bug857)
$ 
user@machine  demo (bug857)
$ git checkout master
Basculement sur la branche 'master'
user@machine  demo (master)
$ git log
commit edecf7025f7af2302e826b3b153781c41c370d6c (HEAD -> master)
Author: lauhub <lau.hub@gmail.com>
Date:   Mon Jun 19 09:06:39 2023 +0200

    Version en cours de développement

commit 9544f8e445a2258e9a595d01e8f85a9d44440ed7 (tag: v1_0)
Author: lauhub <lau.hub@gmail.com>
Date:   Mon Jun 19 09:03:08 2023 +0200

    Ajout documentation

commit 62f5d0601aed78474dc9fc2db5c4f133728f0a3c
Author: lauhub <lau.hub@gmail.com>
Date:   Mon Jun 19 09:01:47 2023 +0200

    initial commit
user@machine  demo (master)
$ git rebase bug857 
Rembobinage préalable de head pour pouvoir rejouer votre travail par-dessus...
Application de  Version en cours de développement
user@machine  demo (master)
$ git log
commit 849e3dd96ca7c22e9598eba2c62c2f246be5f123 (HEAD -> master)
Author: lauhub <lau.hub@gmail.com>
Date:   Mon Jun 19 09:06:39 2023 +0200

    Version en cours de développement

commit da033f69b241169143958caa7b10309cc5dc29e5 (bug857)
Author: lauhub <lau.hub@gmail.com>
Date:   Mon Jun 19 09:25:20 2023 +0200

    Correction bug 857

commit 9544f8e445a2258e9a595d01e8f85a9d44440ed7 (tag: v1_0)
Author: lauhub <lau.hub@gmail.com>
Date:   Mon Jun 19 09:03:08 2023 +0200

    Ajout documentation

commit 62f5d0601aed78474dc9fc2db5c4f133728f0a3c
Author: lauhub <lau.hub@gmail.com>
Date:   Mon Jun 19 09:01:47 2023 +0200

    initial commit
user@machine  demo (master)
$ 

Gestion des branches

Envoi d’une branche locale vers une branche distante

git push -u origin laurent_h_ft001

Supprimer une branche distante

Dans GitHub, aller dans View all branches (dans l’onglet Branches)

Cliquer sur la petite “poubelle” en face de la branche à supprimer

Arrêter de suivre une branche distante

Depuis le dépôt local, se placer sur la branche de développement.

Puis faire (en remplaçant <remote branch name> par le nom de la branche):

git branch -d -r origin/<remote branch name>

Puis faire un git status

On branch laurent_h_ft001
Your branch is based on 'origin/laurent_h_ft001', but the upstream is gone.
  (use "git branch --unset-upstream" to fixup)

nothing to commit, working tree clean

Puis lancer la commande indiquée:

git branch --unset-upstream

Source: How do you stop tracking a remote branch in Git? - Stack Overflow

Synchronisation depuis un dépôt forké

Mise à jour du dépôt forké depuis le dépôt de référence

  1. Se placer sur la branche main
  2. Cliquer sur Sync Fork
  3. Cliquer sur le bouton Update qui apparaît

Après avoir fait un update depuis la branche main dans GitHub

Dans le dépôt local

git checkout main

Récupérer les modifications issues de la branche main de votre fork

git pull

La commande devrait faire une réponse qui ressemble à ceci:

remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 0), reused 1 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), 1.01 KiB | 344.00 KiB/s, done.
From github.com:TSTN1-22-23/depots-clone
   81f6c3b..70e6c82  main       -> origin/main
Updating 81f6c3b..70e6c82
Fast-forward
 bonjour.py | 1 +
 1 file changed, 1 insertion(+)

Se replacer dans la branche de travail (ex: branche prenom_n):

git checkout laurent_h_ft001

Faire un rebase pour appliquer les modifications issues de main

git rebase main

Qui devrait afficher:

Successfully rebased and updated refs/heads/laurent_h_ft001.

SI NÉCESSAIRE résoudre les conflits localement

Création d’un fichier Python nommé: nom_prenom.py

Modèle du fichier

À créer dans la branche module_nom_prenom

def ping_nom_prenom(message):
  print(message + " bla bla bla")

if __name__ == "__name__":
  ping_nom_prenom("tu peux pas test !")