IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

FAQ Git : retrouvez les meilleures réponses à vos questions pour apprendre Git, de niveau débutant à expert

FAQ Git : retrouvez les meilleures réponses à vos questions pour apprendre Git, de niveau débutant à expertConsultez toutes les FAQ

Nombre d'auteurs : 6, nombre de questions : 110, dernière mise à jour : 19 juin 2021 

 
OuvrirSommaireLes branches

Conceptuellement, une branche est une ligne de développement dont le but est d’ajouter de nouveaux commits à l’arbre des commits constituants le dépôt.

C’est depuis une branche que l’utilisateur :

  • modifie le répertoire de travail working directory (modification des sources) ;
  • ajoute à l’index ces modifications ;
  • et qu’il crée des commits.

Techniquement, une branche est une référence sur le dernier commit d’une série de commits. Tous les commits descendants font donc partie de la branche.

Ainsi, manipuler une branche est une opération très rapide à exécuter puisqu’il s’agit d’un pointeur et non d’un conteneur.

Mis à jour le 8 mars 2019  par Marc Loupias
 
Sélectionnez
1.
2.
$ git branch -l
* master
Mis à jour le 8 mars 2019  par Marc Loupias
 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
$ git remote show origin

* distante origin
  URL de rapatriement : https://github.com/<user>/<repo>.git
  URL push : https://github.com/<user>/<repo>.git
  Branche HEAD : master
  Branche distante :
    master suivi
  Branche locale configurée pour 'git pull' :
    master fusionne avec la distante master
  Référence locale configurée pour 'git push' :
    master pousse vers master (à jour)
Mis à jour le 8 mars 2019  par Marc Loupias
 
Sélectionnez
1.
git checkout -b <nom-branche>

Cette commande a pour effet de créer une branche sur la base de celle actuellement active, puis de faire un checkout de la branche nouvellement créée (la rendre active).

Cette création est évidemment seulement locale.

Mis à jour le 8 mars 2019  par Marc Loupias

Il faut créer la branche en local, puis la pousser sur le dépôt distant :

 
Sélectionnez
1.
2.
git checkout -b <nom-branche>
git push <nom-remote> <nom-branche>
Mis à jour le 8 mars 2019  par Marc Loupias
 
Sélectionnez
1.
git branch -D <nom-branche>

L’option -d peut être utilisée à la place de l’option -D mais seulement si la branche a auparavant été fusionnée par la commande merge dans la branche parente.

Mis à jour le 8 mars 2019  par Marc Loupias
 
Sélectionnez
1.
git push <nom-remote> --delete <nom-branche>

La branche à supprimer doit avoir été fusionnée dans son parent, sinon la suppression sera refusée.

Mis à jour le 8 mars 2019  par Marc Loupias
 
Sélectionnez
1.
git branch -m <nouveau-nom>

Cette commande ne fonctionnera pas si <nouveau-nom> est déjà utilisé pour un nom de branche.

Mis à jour le 8 mars 2019  par Marc Loupias

Il y a deux axes de comparaison possibles, on peut vouloir comparer :

  • les séries de commits des branches (les historiques des commits) ;
  • l’état des fichiers (les contenus des commits).
Mis à jour le 8 mars 2019  par Marc Loupias

Pour comparer les historiques de deux branches, on se référera à la commande git log, pour comparer l’état des fichiers on se référera à la commande git diff.

Mis à jour le 8 mars 2019  par Marc Loupias

Le type de comparaison est déterminé par les range operator « double dot » (..) et « triple dot » (...).

L’usage se fait de cette manière : git log A..B ou git diff A..B.

Attention, selon la commande utilisée (log ou diff), la sémantique des opérateurs est différente.

Dans le cas de git log.

  • .. permet de connaître les éléments présents dans l’un mais pas dans l’autre.
  • ... permet de connaître tous les éléments qui ne sont pas partagés.

Dans le cas de git diff.

  • .. permet de connaître les différences de contenu entre les têtes (dernier commit, nommé souvent tip en anglais) des deux branches.
  • ... permet de connaître les différences entre la tête de B et la merge base (le dernier commit commun dans l’arbre) commune avec A.
Mis à jour le 8 mars 2019  par Marc Loupias

Si je souhaite connaître la liste des commits existants dans release/v1.0.0 et qui n’existent pas dans master :

 
Sélectionnez
1.
git log release/v1.0.0..master

Pour connaître la liste des commits existants dans master et qui n’existent pas dans release/v1.0.0, on inverse simplement l’ordre :

 
Sélectionnez
1.
git log master..release/v1.0.0

Certaines options de la commande log sont très pratiques pour affiner l’affichage brut de git log, elles peuvent être combinées.

  • --oneline permet de limiter l’affichage de chaque commit sur une seule ligne.
  • --stat affiche la liste des fichiers modifiés et le nombre d’ajouts et suppressions, par exemple :
 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
$ git log --oneline --stat release/v1.0.0..master

df76163 Logs the correct path to jsonresume.json
 lib/login/login-request.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
7ee2e20 update node version in engine section to drop unmaintained node version and match travis config
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
e9a998f update superagent from 2.+ to 3.+
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Dans le cas de l’usage de l’opérateur triple dot (...), l’ajout des options --left-right, --decorate et --graph permet de rendre plus lisible le résultat.

  • --left-right ajoute à chaque ligne un < ou un > selon que la ligne fait référence à la première ou à la deuxième branche.
  • --decorate affiche clairement les « refs » (tags, branches, HEAD) entre parenthèses après le SHA-1 des commits.
  • --graph constitue un graphe en ASCII art.

Par exemple :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
$ git log --oneline --decorate --left-right --graph release/v1.0.0...master

> 332d9e9 (HEAD -> master, origin/master) Fix for themes and version bump
> 7d5f8a7 Fixed delete account issues. removed PDF exports for now
>   6d6c792 Merge pull request #290 from MarcLoupias/fix/security
|\  
| > 7ee2e20 (fork/fix/security, fix/security) update node version in engine section to drop unmaintained node version and match travis config
| > e9a998f update superagent from 2.+ to 3.+
| > be7e49d moving to an up-to-date and actively maintained package to open the browser
> | df76163 Logs the correct path to jsonresume.json
|/  
>   5aaf9b8 (fork/master, fork/HEAD) Merge pull request #275 from brandenbird/pr/change-export-to-puppeteer
|\  
| > 6e1ec92 Fixed exports for pdfs
> | f0af5f6 Update node.js version to be tested on Travis CI
> | 4938d0e Update .nvmrc to use node.js v8.x LTS
> |   eef87b2 Merge pull request #273 from jouk0/patch-1
|\ \  
| |/  
|/|
| > fa5130e Updated resume.json path change on the process arg
|/  
> ed2106d Added https to all external requests
Mis à jour le 8 mars 2019  par Marc Loupias
 
Sélectionnez
1.
git diff release/v1.0.0..master

Cet affichage risque d’être assez indigeste si vous avez beaucoup de fichiers et de différences.

Une première étape pour trier, pourrait être de ne pas afficher les différences en tant que telles, mais de lister les fichiers et le nombre de différences qu’ils contiennent avec l’option --stat :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
$ git diff --stat release/v1.0.0..master

 .env                              |    2 +-
 .nvmrc                            |    2 +-
 .travis.yml                       |   12 +-
 README.md                         |   88 ++---
 index.js                          |  111 ++++--
 lib/builder/index.js              |   29 +-
 lib/export-resume/index.js        |  145 ++++----
 lib/export-resume/menu.js         |   24 --
 lib/init.js                       |  135 ++++---
 lib/login/login-request.js        |    4 +-
 lib/pre-flow/check-pkg-version.js |    2 +-
 lib/pre-flow/get-resume.js        |    8 +-
 lib/pre.js                        |    2 +-
 lib/publish/menu.js               |   44 +--
 lib/publish/publish-resume.js     |    6 +-
 lib/register/register-user.js     |    4 +-
 lib/register/validate.js          |    2 +-
 lib/serve.js                      |   33 +-
 lib/settings/change-password.js   |    2 +-
 lib/settings/change-theme.js      |    6 +-
 lib/settings/delete-user.js       |    2 +-
 lib/settings/menu.js              |   70 ++--
 lib/test.js                       |    6 +-
 lib/version.js                    |    2 +-
 package-lock.json                 | 1621 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 package.json                      |   29 +-
 test/index.js                     |    7 +-
 27 files changed, 2027 insertions(+), 371 deletions(-)
Mis à jour le 8 mars 2019  par Marc Loupias

On ajoute simplement le chemin relatif du fichier à comparer :

 
Sélectionnez
1.
git diff release/v1.0.0..master lib/builder/index.js
Mis à jour le 20 novembre 2018  par Marc Loupias

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2019 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.