Comment vérifier si un fichier a été renommé dans l'historique Git

GitGitBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire (lab), vous apprendrez à suivre efficacement l'historique d'un fichier dans Git, même après qu'il a été renommé. Nous allons explorer la puissante commande git log --follow pour suivre l'historique d'un fichier malgré les changements de nom.

Vous apprendrez également à utiliser git diff --name-status pour examiner l'état des fichiers entre les commits. Enfin, nous testerons ces techniques sur des fichiers qui n'ont pas été renommés pour comprendre la différence dans la sortie.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BasicOperationsGroup -.-> git/add("Stage Files") git/BasicOperationsGroup -.-> git/status("Check Status") git/BasicOperationsGroup -.-> git/commit("Create Commit") git/BasicOperationsGroup -.-> git/diff("Compare Changes") git/BranchManagementGroup -.-> git/log("Show Commits") subgraph Lab Skills git/add -.-> lab-560030{{"Comment vérifier si un fichier a été renommé dans l'historique Git"}} git/status -.-> lab-560030{{"Comment vérifier si un fichier a été renommé dans l'historique Git"}} git/commit -.-> lab-560030{{"Comment vérifier si un fichier a été renommé dans l'historique Git"}} git/diff -.-> lab-560030{{"Comment vérifier si un fichier a été renommé dans l'historique Git"}} git/log -.-> lab-560030{{"Comment vérifier si un fichier a été renommé dans l'historique Git"}} end

Exécuter git log --follow -- Fichier

Dans cette étape, nous allons explorer comment suivre l'historique d'un fichier spécifique, même s'il a été renommé. C'est là que la commande git log --follow s'avère utile.

Tout d'abord, assurons-nous que nous sommes dans le répertoire de notre projet.

cd ~/project/my-time-machine

Maintenant, créons un nouveau fichier et ajoutons-y du contenu.

echo "This is the original content." > original_file.txt

Ajoutons et validons (commit) ce fichier.

git add original_file.txt
git commit -m "Add original file"

Vous devriez voir une sortie similaire à celle-ci :

[master 1a2b3c4] Add original file
 1 file changed, 1 insertion(+)
 create mode 100644 original_file.txt

Maintenant, renommons le fichier.

git mv original_file.txt renamed_file.txt

Vérifions l'état pour voir le changement.

git status

Vous devriez voir quelque chose comme ceci :

On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        renamed: original_file.txt -> renamed_file.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        message.txt

Validons le renommage.

git commit -m "Rename original file"

Vous devriez voir une sortie similaire à celle-ci :

[master 5d6e7f8] Rename original file
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename original_file.txt -> renamed_file.txt (100%)

Maintenant, utilisons git log pour voir l'historique du fichier renommé.

git log renamed_file.txt

Cela n'affichera que le commit où le fichier a été renommé. Pour voir l'historique avant le renommage, nous devons utiliser l'option --follow.

git log --follow renamed_file.txt

Cette commande vous montrera l'historique du fichier, en suivant ses changements de nom. Vous devriez voir à la fois le commit "Rename original file" et le commit "Add original file".

La commande git log --follow est essentielle lorsque vous avez besoin de comprendre l'historique complet d'un fichier qui a été déplacé ou renommé dans votre dépôt (repository). Elle vous aide à retracer l'évolution du fichier à travers différents commits, indépendamment de son nom actuel.

Utiliser git diff --name-status

Dans cette étape, nous allons apprendre à utiliser git diff --name-status pour obtenir un résumé des modifications entre les commits, en nous concentrant particulièrement sur l'état et les noms des fichiers qui ont été modifiés.

Tout d'abord, assurez-vous d'être dans le bon répertoire :

cd ~/project/my-time-machine

Faisons une autre modification à notre fichier renamed_file.txt.

echo "Adding a new line." >> renamed_file.txt

Maintenant, regardons l'état.

git status

Vous devriez voir que le fichier renamed_file.txt a été modifié.

On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   renamed_file.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        message.txt

no changes added to commit (use "git add" and/or "git commit -a")

Ajoutons la modification à la zone de préparation (staging area).

git add renamed_file.txt

Maintenant, utilisons git diff --name-status pour voir les modifications entre le dernier commit et les modifications préparées.

git diff --name-status --cached

L'option --cached indique à git diff de comparer les modifications préparées (l'index) avec le dernier commit (HEAD).

Vous devriez voir une sortie similaire à celle-ci :

M       renamed_file.txt

La sortie M renamed_file.txt indique que le fichier renamed_file.txt a été Modifié.

Maintenant, validons cette modification.

git commit -m "Add new line to renamed file"

Vous devriez voir une sortie similaire à celle-ci :

[master 9h0i1j2] Add new line to renamed file
 1 file changed, 1 insertion(+)

La commande git diff --name-status est très utile pour obtenir un aperçu rapide des types de modifications (ajoutées, modifiées, supprimées, renommées, copiées) qui se sont produites entre différents points de l'historique Git, sans afficher le contenu complet des modifications. Cela est particulièrement utile lors de la revue des modifications avant de valider (commit) ou lors de la comparaison de branches.

Tester les fichiers non-renommés

Dans cette étape, nous allons observer le comportement de git log --follow avec des fichiers qui n'ont pas été renommés. Cela vous aidera à mieux comprendre quand l'option --follow est nécessaire.

Tout d'abord, assurez-vous d'être dans le bon répertoire :

cd ~/project/my-time-machine

Nous avons déjà renamed_file.txt et message.txt dans notre dépôt (repository). Ajoutons du contenu à message.txt.

echo "This is a message." >> message.txt

Vérifions l'état.

git status

Vous devriez voir que message.txt a été modifié et que renamed_file.txt est à jour.

On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   message.txt

no changes added to commit (use "git add" and/or "git commit -a")

Ajoutons et validons (commit) la modification apportée à message.txt.

git add message.txt
git commit -m "Add content to message file"

Vous devriez voir une sortie similaire à celle-ci :

[master 3k4l5m6] Add content to message file
 1 file changed, 1 insertion(+)

Maintenant, utilisons git log sur message.txt.

git log message.txt

Cela vous montrera l'historique de message.txt. Vous devriez voir le commit "Add content to message file" et le commit initial où message.txt a été créé (du premier laboratoire).

Maintenant, essayons git log --follow sur message.txt.

git log --follow message.txt

Vous remarquerez que la sortie est la même que celle de git log message.txt. C'est parce que message.txt n'a pas été renommé ni déplacé. L'option --follow est spécifiquement conçue pour suivre l'historique d'un fichier à travers les changements de nom. Pour les fichiers qui n'ont pas été renommés, git log suffit.

Cette étape démontre que si git log --follow est puissant pour suivre les fichiers renommés, pour les fichiers qui conservent leur nom, la commande standard git log fournit l'historique complet. Comprendre cette distinction vous aide à choisir la bonne commande pour la tâche.

Résumé

Dans ce laboratoire, nous avons appris à suivre l'historique d'un fichier dans Git, même après qu'il a été renommé. Nous avons commencé par créer, ajouter et valider (commit) un fichier, puis l'avons renommé en utilisant git mv et validé le renommage. Nous avons ensuite démontré qu'une simple commande git log sur le nouveau nom de fichier ne montre que l'historique à partir du renommage.

Le point clé était l'utilisation de la commande git log --follow <filename>. Cette option puissante permet à Git de retracer l'historique d'un fichier à travers les changements de nom, offrant une vue complète de son évolution depuis sa création jusqu'à son état actuel. Cela est crucial pour comprendre le contexte complet des modifications d'un fichier dans l'historique d'un projet.