Получить список всех коммитов, упорядоченных по дате (включая оборванные коммиты)

Как я могу получить список абсолютно всего, к чему можно получить доступ, упорядоченного по дате? Обычные коммиты, тайники, сброшенные тайники, коммиты из удаленных веток — все, что еще не было очищено.

Я спрашиваю, потому что мне нужно найти конкретную фиксацию (или тайник), и я мало что помню, кроме даты, когда она должна была быть добавлена. Поскольку я никогда не запускаю git gc, я предполагаю, что он все еще должен быть где-то доступен.

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

Редактировать: В случае, если это неясно, крайне важно, чтобы я искал оборванные коммиты и удаленные тайники в дополнение к обычным. Такие вопросы, как Как я могу сделать порядок логов git на основе на отметке времени автора? не обращайте на это внимания.


person sashoalm    schedule 13.03.2015    source источник
comment
Настоящая проблема здесь в том, что git-fsck — это то, что вы использовали бы для поиска оборванного коммита, но он не упорядочивает его по дате. Вы получите только SHA (или несколько) ваших оборванных коммитов.   -  person Makoto    schedule 13.03.2015
comment
@Makoto Хм, если я смогу получить дату в журнале, я мог бы хотя бы найти ее с помощью регулярного выражения. Я мог бы попытаться осмотреться в этом месяце. Я бы предпочел упорядочить по дате, но для начала может помочь даже их неупорядоченность.   -  person sashoalm    schedule 13.03.2015


Ответы (1)


Одна вещь, которую можно попробовать, это просто git reflog или git reflog HEAD (которые эквивалентны, первый - это просто сокращение для второго).

Журнал ссылок отслеживает каждую фиксацию, на которую указывает конкретная ссылка; HEAD — это ссылка, указывающая на то, что вы в настоящее время извлекаете, поэтому, если вы когда-либо извлекали рассматриваемую фиксацию на этой машине, и она еще не была проверена gc, она должна отображаться в этом списке.

person Brian Campbell    schedule 13.03.2015
comment
Спасибо за ответ, но git reflog не показывал временные метки, и они мне нужны, чтобы найти мою фиксацию. Я буду искать коммиты вокруг определенной даты. - person sashoalm; 13.03.2015
comment
@sashoalm Вы можете передать любой из git log красивых форматов в git reflog, чтобы вы могли использовать git reflog --pretty=fuller или какой-либо пользовательский формат, содержащий нужную вам информацию. Прочитав ваше разъяснение, я понял, что это не касается выпадающих тайников; тайники - это вещи, которые никогда не были зафиксированы, поэтому они не будут отображаться в журнале ссылок для HEAD и фактически хранятся как специальный журнал ссылок, поэтому, когда они удаляются, они удаляются из этого специального журнала ссылок. - person Brian Campbell; 13.03.2015
comment
Выпавшие тайники сразу же убираются пылесосом? Я имею в виду, хранятся ли они где-то вообще или действительно удаляются из git при удалении? - person sashoalm; 13.03.2015
comment
Я вижу это в stackoverflow.com/questions/89332/recover -dropped-stash-in-git они упоминают об использовании git fsck --no-reflog | awk '/dangling commit/ {print $3}', я мог бы попробовать сделать это. - person sashoalm; 13.03.2015
comment
@sashoalm различные команды запускают git gc --auto, которые автоматически переупаковывают коммиты, если слишком много незакрепленных объектов или слишком много запакованных файлов, и автоматически удаляют незакрепленные объекты, которые старше заданной даты (по умолчанию 2 недели). Таким образом, если ваши коммиты старше двух недель и фактически нигде не упоминаются, они, вероятно, были удалены. Если на них все еще есть ссылки из журнала ссылок или они старше двух недель, то вы можете найти их либо просмотрев журналы ссылок, либо с помощью метода, который вы упомянули, используя git fsck для их поиска. - person Brian Campbell; 13.03.2015
comment
Хорошо, я приму ваш ответ, хотя самые полезные части прямо сейчас в комментариях :) - person sashoalm; 13.03.2015