Existe-t-il une commande dans Git pour voir (soit vidée sur stdout, soit dans $PAGER
ou $EDITOR
) une version particulière d'un fichier particulier?
git checkout <sha1-of-the-commit-you-need>
, après,git checkout HEAD
Existe-t-il une commande dans Git pour voir (soit vidée sur stdout, soit dans $PAGER
ou $EDITOR
) une version particulière d'un fichier particulier?
git checkout <sha1-of-the-commit-you-need>
, après,git checkout HEAD
Réponses:
Vous pouvez utiliser git show
avec un chemin depuis la racine du référentiel ( ./
ou ../
pour un cheminement relatif):
$ git show REVISION:path/to/file
Remplacez REVISION
par votre révision réelle (peut être un SHA de validation Git, un nom de balise, un nom de branche, un nom de validation relatif ou toute autre manière d'identifier une validation dans Git)
Par exemple, pour afficher la version du fichier <repository-root>/src/main.c
d'il y a 4 validations, utilisez:
$ git show HEAD~4:src/main.c
Git pour Windows nécessite des barres obliques, même dans les chemins relatifs au répertoire actuel. Pour plus d'informations, consultez la page de manuel de git-show
.
Faire ceci par date ressemble à ceci:
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt
Notez que cela HEAD@{2013-02-25}
signifie «où HEAD se trouvait le 25/02/2013» dans ce référentiel (à l' aide du reflog ), et non «le dernier commit avant le 25/02/2013 dans cette branche de l'historique».
master
au lieu de HEAD@{2013-02-25}
, si vous êtes sur une branche
git log --since='2016-04-28 23:59:59 +0100'
?
Si vous aimez les interfaces graphiques, vous pouvez utiliser gitk:
lancez gitk avec:
gitk /path/to/file
Choisissez la révision dans la partie supérieure de l'écran, par exemple par description ou par date. Par défaut, la partie inférieure de l'écran affiche le diff pour cette révision (correspondant au bouton radio "patch").
Pour voir le fichier de la révision sélectionnée:
gitk REVISION /path/to/file
. Cela peut être utile lorsque vous souhaitez comparer une certaine version par exemple.
Vous pouvez également spécifier un commit hash
(souvent aussi appelé commit ID
) avec la git show
commande .
git show <commitHash>:/path/to/file
git log /path/to/file
commit hash
tel que commit 06c98...
(06c98 ... étant le hachage de validation)commit hash
git show <commitHash>:/path/to/file
utilisant les commit hash
étapes 3 et path/to/file
1.Remarque: l' ajout de ./
lorsque vous spécifiez un chemin relatif semble important, c'est-à-dire git show b2f8be577166577c59b55e11cfff1404baf63a84:./flight-simulation/src/main/components/nav-horiz.html
.
git show <SHA1> --name-only
pour l'obtenir.
En plus de la réponse de Jim Hunziker ,
vous pouvez exporter le fichier de la révision comme,
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt > old_fileInCurrentDirectory.txt
J'espère que cela t'aides :)
Pour voir rapidement les différences avec les anciennes révisions d'un fichier:
git show -1 filename.txt
> comparer avec la dernière révision du fichier
git show -2 filename.txt
> comparer avec l'avant-dernière révision
git show -3 fielname.txt
> comparer avec le dernier 3ème dernière révision
git log -p
vous montrera non seulement les journaux de validation, mais aussi les différences de chaque validation (à l'exception des validations de fusion). Ensuite, vous pouvez appuyer sur /
, saisir le nom du fichier et appuyer sur enter
. Appuyez sur n
ou p
pour passer à l'occurrence suivante / précédente. De cette façon, vous verrez non seulement les modifications dans le fichier, mais également les informations de validation.
git log -pm
commits de fusion soient également affichés.
git log -p -- filename.txt
pour limiter l'historique uniquement au fichier souhaité.
Vous pouvez utiliser un script comme celui-ci pour vider toutes les versions d'un fichier dans des fichiers séparés:
par exemple
git_dump_all_versions_of_a_file.sh path/to/somefile.txt
Obtenez le script ici comme réponse à une autre question similaire
git_root
, git_log_short
Et git_log_message_for_commit
sont portés disparus.
VOIE 1: (Je préfère cette façon)
git reflog
git diff-tree --no-commit-id --name-only -r <commitHash>
exemple:
git diff-tree --no-commit-id --name-only -r d2f9ba4
// "d2f9ba4" est l'ID de validation de "1."
git show <commitHash>:/path/to/file
exemple:
git show d2f9ba4:Src/Ext/MoreSwiftUI/ListCustom.swift
// "Src / ..." est le chemin du fichier de "2."
VOIE 2:
git reflog
git reset --hard %commit ID%
git reset --hard c14809fa
Aide à récupérer plusieurs fichiers d'une révision donnée
Lorsque vous essayez de résoudre des conflits de fusion, cet assistant est très utile:
#!/usr/bin/env python3
import argparse
import os
import subprocess
parser = argparse.ArgumentParser()
parser.add_argument('revision')
parser.add_argument('files', nargs='+')
args = parser.parse_args()
toplevel = subprocess.check_output(['git', 'rev-parse', '--show-toplevel']).rstrip().decode()
for path in args.files:
file_relative = os.path.relpath(os.path.abspath(path), toplevel)
base, ext = os.path.splitext(path)
new_path = base + '.old' + ext
with open(new_path, 'w') as f:
subprocess.call(['git', 'show', '{}:./{}'.format(args.revision, path)], stdout=f)
Usage:
git-show-save other-branch file1.c path/to/file2.cpp
Résultat: les éléments suivants contiennent les versions alternatives des fichiers:
file1.old.c
path/to/file2.old.cpp
De cette façon, vous conservez l'extension de fichier pour que votre éditeur ne se plaint pas et puisse facilement trouver l'ancien fichier juste à côté du plus récent.