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
- Qu’est-ce qu’une branche ?
- Comment lister les branches locales ?
- Comment lister toutes les branches (locales, distantes, traquées, non-traquées) ?
- Comment créer une branche ?
- Comment créer une branche sur une dépôt distant ?
- Comment supprimer une branche ?
- Comment supprimer une branche distante ?
- Comment renommer une branche ?
- Comment comparer deux branches ?
- Comment comparer deux branches pour connaître les historiques des commits ?
- Comment comparer deux branches pour connaître les contenus des commits ?
- Comment comparer les historiques de deux branches ?
- Comment comparer l’état de tous les fichiers présents dans deux branches ?
- Comment comparer l’état d’un fichier présent dans deux 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.
2.
$
git branch -l
* master
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)
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.
Il faut créer la branche en local, puis la pousser sur le dépôt distant :
2.
git checkout -b <
nom-branche>
git push <
nom-remote>
<
nom-branche>
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.
git push <
nom-remote>
--delete <
nom-branche>
La branche à supprimer doit avoir été fusionnée dans son parent, sinon la suppression sera refusée.
git branch -m <
nouveau-nom>
Cette commande ne fonctionnera pas si <nouveau-nom> est déjà utilisé pour un nom de branche.
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).
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.
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.
Si je souhaite connaître la liste des commits existants dans release/v1.0.0 et qui n’existent pas dans master :
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 :
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 :
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 :
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
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 :
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
(
-)
On ajoute simplement le chemin relatif du fichier à comparer :
git diff release/v1.0
.0
..master lib/builder/index.js