Есть ли быстрая команда Git для просмотра старой версии файла?
Есть ли команда в Git, чтобы увидеть (либо сбрасывать на stdout, либо в $PAGER
или $EDITOR
) конкретную версию определенного файла?
Ответы
Ответ 1
Вы можете использовать git show
:
$ git show REVISION:path/to/file
Замените REVISION на вашу фактическую ревизию (может быть Git commit SHA, имя тега, имя ветки, относительное имя фиксации или любой другой способ идентификации фиксации в Git)
Например, чтобы просмотреть версию файла src/main.c
с 4 src/main.c
, используйте:
$ git show HEAD~4:src/main.c
Обратите внимание, что путь находится из корня репозитория, если только он не начинается с./или../, чтобы указать относительный путь. Для Git для Windows требуется косая черта даже в пути по отношению к текущему каталогу. Для получения дополнительной информации ознакомьтесь с man-страницей git-show
.
Ответ 2
Выполнение этого по дате выглядит следующим образом:
git show [email protected]{2013-02-25}:./fileInCurrentDirectory.txt
Обратите внимание, что [email protected]{2013-02-25}
означает "где HEAD был в 2013-02-25" в этом репозитории (используя reflog), а не "последнее совершение до 2013 года" -02-25 в этой ветке в истории ".
Ответ 3
Если вам нравятся графические интерфейсы, вы можете использовать gitk:
-
запустить gitk с помощью:
gitk /path/to/file
-
Выберите версию в верхней части экрана, например. по описанию или дате. По умолчанию в нижней части экрана отображается разность для этой ревизии (соответствующая переключателю "patch" ).
-
Чтобы просмотреть файл для выбранной версии:
- Нажмите на кнопку "Дерево". Это покажет корень дерева файлов в этой ревизии.
- Перейдите к файлу.
Ответ 4
Вы также можете указать commit hash
(часто также называемый commit ID
) с помощью команды git show
.
В двух словах
git show <commitHash>:/path/to/file
Шаг за шагом
- Показать журнал всех изменений для данного файла с помощью
git log /path/to/file
- В списке показанных изменений отображается
commit hash
, например commit 06c98...
(06c98... являющийся хешем фиксации)
- Скопируйте
commit hash
- Запустите команду
git show <commitHash>:/path/to/file
, используя commit hash
для шага 3 и path/to/file
для шага 1.
Примечание. добавление ./
при определении относительного пути кажется важным, то есть git show b2f8be577166577c59b55e11cfff1404baf63a84:./flight-simulation/src/main/components/nav-horiz.html
.
Ответ 5
В дополнение к Джим Хунцикер ответьте,
вы можете экспортировать файл из ревизии как,
git show [email protected]{2013-02-25}:./fileInCurrentDirectory.txt > old_fileInCurrentDirectory.txt
Надеюсь, что это поможет:)
Ответ 6
git log -p
покажет вам не только журналы фиксации, но и разницу каждого фиксации (за исключением коммитов). Затем вы можете нажать /
, ввести имя файла и нажать enter
. Нажмите n
или p
, чтобы перейти к следующему/предыдущему вхождению. Таким образом, вы не просто увидите изменения в файле, но также информацию о фиксации.
Ответ 7
Чтобы быстро увидеть различия со старыми ревизиями файла:
git show -1 filename.txt
> для сравнения с последней ревизией файла
git show -2 filename.txt
> для сравнения со второй последней ревизией
git show -3 fielname.txt
> для сравнения с последней 3-ей последней ревизией
Ответ 8
Вы можете использовать такой сценарий, чтобы сбрасывать все версии файла для разделения файлов:
например
git_dump_all_versions_of_a_file.sh path/to/somefile.txt
Получите сценарий здесь как ответ на другой подобный вопрос
Ответ 9
Помощник для извлечения нескольких файлов из данной версии
При попытке разрешить конфликты слияния этот помощник очень полезен:
#!/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)
GitHub вверх по течению.
Использование:
git-show-save other-branch file1.c path/to/file2.cpp
Результат: следующие содержат альтернативные версии файлов:
file1.old.c
path/to/file2.old.cpp
Таким образом, вы сохраняете расширение файла, поэтому ваш редактор не будет жаловаться и может легко найти старый файл, расположенный рядом с новым.