Синтаксис @{date}
не даст вам того, что вы хотите. Я бы вошел в то, что вы делаете хотите, но я был избит до ответа;см. Марк Марк Адельсбергер вместо ответа . : -)
Что нужно знать о синтаксисе @{...}
С синтаксисом @{date}
не имеет значения, сколько лет источнику репозитория . Неважно, сколько коммитов у вас есть. Все, что имеет значение, это то, что находится в так называемых reflogs .
этого конкретного клона. Каждый репозиторий Git - каждый клон - имеет свои собственные reflogs. В общем, никакие два разных репозитория Git не согласятся с тем, что входит в reflogs. Reflogs не предназначены для такой работы. Какой вид работы? Этот вид:
Я хочу, чтобы изменения, внесенные в этот конкретный файл за определенный период времени.
Перепрошивки абсолютно ничего не сообщают об измененияхв файлах, или изменения не в файлах, с течением времени. Они сообщают вам об изменениях в ссылках вашего Git с течением времени.
Это может вас озадачить, что именно: ref или reference является. Мы, вероятно, не должны вдаваться в подробности, но каждое название ветви, например master
, на самом деле является ссылкой, полное написание которой refs/heads/master
;каждое имя тега, например v1.2
, является ссылкой, полное написание которой refs/tags/v1.2
;и каждое имя для удаленного отслеживания, такое как origin/master
, является ссылкой, полное написание которой начинается с refs/remotes/
. Таким образом, они являются просто обобщением различных имен, которые люди обычно используют, чтобы говорить о коммитах. Чтобы говорить о коммитах Git , нужны их необработанные хэш-идентификаторы. имена в некоторой степени просто существуют, чтобы нам, слабым людям, не приходилось запоминать произвольные, большие уродливые хэш-идентификаторы. 1
Ключ кпонимание этого и синтаксиса @{...}
означает, что эти имена - например, refs/heads/master
- изменяются с течением времени. Прямо сейчас ваш master
коммит может быть a123456...
. Вчера, возможно, это был какой-то другой коммит, а завтра, возможно, еще один коммит. Ваш Git master
будет меняться со временем, и каждый раз, когда он меняется, ваш Git ведет запись того, что было . Эта запись возвращается только к тому моменту: коммиты являются постоянными, но запись с хэш-идентификатором master
означала, когда нет. Более того, он не переносится из одного клона в другой: Запись каждого клона о том, что master
имел в виду, когда является конфиденциальной для этого конкретного Git . В новом клоне, который имеет все коммитов 2 , есть только одно значение, которое master
когда-либо имело, то есть то, что у него сейчас.
Примечаниечто вы также можете использовать @{<em>number</em>}
. При этом выбирается номерная запись в reflog.
Чтобы просмотреть фактический reflog для любого конкретного ref, запустите git reflog <em>ref</em>
, например, git reflog master
. Команда git reflog
также имеет различные другие подкоманды для работы с журналами. Подробнее см. в документации .
1 Имена имеют другие функции. Подробнее об этом см. Think Like (а) Git .
2 Предполагая, что это не клон мелкий , то естьне использовать некоторые из новых функций «пакета Promisor», которые еще не используются в общем. Кроме того, если вы клонировали с -b
или --single-branch
, или вышестоящий репозиторий настроен не так, как обычно, у вас может вообще не быть ветки с именем master
.