2015-03-19 3 views
2

Я хотел бы видеть старую версию файла, но это:См Nth предыдущей версии файла

git show HEAD~1:main.c 

дает мне предыдущее коммят. Этот файл не изменился со времени предыдущего коммита, поэтому я вижу тот же контент. Чтобы найти более старую версию этого файла, мне нужно вручную увеличить спецификацию ревизии, пока не найду фактическое различие. Это расстраивает.

В этом конкретном случае мне не нужны коммиты: я просто хочу видеть предыдущие версии этого конкретного файла. Как я могу дать спецификацию ревизии типа «Nth oldest version»? Спецификации ревизии I know всегда связаны с привязкой, а не связаны с файловой версией.

Ближайшие у меня есть:

git log --follow --pretty=oneline -- annotated-bower.json 

Что дает мне список коммитов, где этот файл был изменен. Теперь, когда я вижу этот список, как я могу сказать git show что-то вроде:

git show OLDER~3:main.c 

без необходимости вручную копировать-вставить совершать спецификации:

git show b27a57c6732200d8ef8b5b8c87d07fe67f37e9db:main.c 

Я могу, конечно, реализовать это сам:

git-previous.sh main.c 3 

Разбор вывода git log --follow --pretty=oneline, чтобы получить хеш-код фиксации и позвонить затем git show, но я хотел бы избежать повторного использования колеса. Кроме того, это похоже на столь полезную функцию, что это , безусловно, часть запаса git, и я только что наблюдал за ней, не так ли?

ответ

2

Ну вы не должны разобрать что-либо, если вы кормите git log правильно:

git log -10 --follow --pretty=%h -- /path/to/your/file 

печатает последние 10 (-10) короткие фиксации хэшей (%h) для файла.

Сделайте вывод git log, поместите его в список и зациклируйте на записи. Готово.

Возможно, это и есть причина, почему существует никакой отдельной команды, чтобы достигнуть этого ... А что касается вашей заметки о

Кроме того, это кажется настолько полезная функция [...]

Я использую git с тех пор как хорошо сейчас и никогда не нуждался в просмотре истории файла в последовательности. Изменения интересны. Таким образом, можно также кормить путь к gitk который приведет список изменений, отображаемых с их различиями в gitk:

gitk -- /path/to/your/file 
+0

«Возьмите выход журнала мерзавца, поместить его в список и цикл по записям. Готово." Я не называю это * done *, как в, я быстро увижу 5-ю версию этого файла. Это требует много ввода (и опечаток), поэтому мне придется поместить это в скрипт, если git не поддерживает это из коробки.И мы, вероятно, используем git по-разному, потому что иногда мне нужен такой рабочий процесс (хотя и не очень часто) – dangonfast

+0

И да, gitk делает правильные вещи здесь, но мне нужна версия из командной строки (которая кажется git не предложение, из коробки?) – dangonfast

+0

Принимая это. Кажется, git не может сделать это напрямую, поэтому необходимы некоторые сценарии. – dangonfast

Смежные вопросы