Як я можу перевірити певну версію одного файлу в Git?


87

Як я можу перевірити певну версію одного файлу в git?

Я знайшов цю пошту у списку розсилки , де було сказано:

$ git checkout HEAD~43 Makefile
$ git reset Makefile

Але я не розумію, як дізнатись 'HEAD ~ 43', якщо я це роблю git log aFile, як я можу дізнатись, яку 'HEAD ~ 43' мені слід використовувати?

І чому мені потрібно запускати git resetцей файл? Що це робить?


"git reset <commit> <file>" працює точно так само, як "git checkout <commit> <file>".
Якуб Нарембський

2
Якщо ваше питання стосується синтаксису HEAD ~ 43 (задокументовано у git-rev-parse), запитайте про це питання, а не про не пов’язане з ним, на яке ви знаєте відповідь. "Що означає HEAD ~ 45, і як знайти конкретну версію файлу"
Якуб Нарембський

відповідно до lt.kernel.org/pub/software/scm/git/docs/v1.6.0.6/… та lt.kernel.org/pub/software/scm/git/docs/v1.6.0.6/git- reset.html , "git reset <commit> <file>" не працює точно так само, як "git checkout <commit> <file>": "git reset <commit> <file>" повертає <file> в індекс від <commit>, не торкаючись <file> у робочому дереві, але «git checkout <commit> <file>» оновлює індекс для <file> з <commit>, а потім оновлює <file> у робочому дереві.
йода

2
Якщо будь-яка з наведених нижче відповідей відповідає на ваше запитання, як працює Stack Overflow, ви "приймете" відповідь, клацнувши галочку поруч із нею; деталі тут . Але лише за умови відповіді на ваше запитання; якщо ні, розгляньте можливість додати більше деталей до запитання та / або коментарів до відповідей, сказавши те, що незрозуміло (поки).
TJ Crowder,

Відповіді:


104

Ви знаєте, до якого коміту (тобто: конкретної версії) належить файл? Тоді зробіть:

git checkout <commit> <file>

Інша команда:

git checkout HEAD~N <file>

Призначений для того, коли ви хочете отримати версію файлу з діапазону назад (що я роблю для ностальгії).


19

HEAD~43просто дерево, тому ви можете використовувати хеш або тег. Вам доведеться відокремити дерево від імені файлу за допомогою --, інакше це трактується як ім'я файлу. Наприклад.

git checkout v0.45 -- filename
git checkout HEAD^ -- filename
git checkout 16bb1a4eeaa9 -- filename

2

HEAD~43посилається на коміт (версію) файлу. Замість цього ви можете використовувати хеш коміту, який ви отримали від виконання git logу файлі. Якщо ви просто хочете файл, вам не потрібно запускати git resetйого; це потрібно лише якщо ви хочете перенаправити файл на поточну HEAD.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.