зарегистрируйте первые 10 в git


91

Два вопроса:

  1. Как показать первые 10 коммитов в git от начала до конца. (без отделения)
  2. Как указать индекс фиксации и зарегистрировать его. (покажите второй или третий)

Я знаю, что git использует parent для связывания коммита, легко регистрировать коммит от начала до конца. подобно:git log HEAD~10

Но мне нужно запросить от начала до конца, возможно ли это?



прокрутите до ответа @kostix
— Мухаммад Умер

Ответы:


60

Просто зарегистрируйте все в однострочном формате и следите за выводом:

git log  --pretty=oneline | tail -n 10 

Большой! Вот что ищу. Спасибо @CharlesB.
— Йохан Чжоу

3
Или используйте, git rev-list HEAD | tail -n 10чтобы получить список из 10 идентификаторов, которые затем можно отобразить в любом формате, который вам нравится (не ограничиваясь однострочным методом).
— torek

17
tailкажется, теряет красивую окраску, которую я получаю в моей консоли git. Передача параметра, git log --oneline -10как в другом ответе, работает так, как я ожидал.
— Джеймс Халс

4
Ясно, что это жесткий путь Unix, лол. См. Ответ @kostix.
— 9301293

1
Обратной стороной этого метода является то, что я могу видеть только свои отправленные коммиты.
— Джек '

255
git log -10

Показывает 10 последних коммитов, соответствующих спецификации ревизии (отсутствие спецификации означает «все коммиты»).

См. Справочную страницу:

git help log

раздел Commit Limiting

-<number>, -n <number>, --max-count=<number>
    Limit the number of commits to output.

6
простой и не зависит от tailдоступности на вашей платформе.
— tenpn 05

8
& не вмешивается в форматирование / раскраску git. Это должен быть принятый ответ x100
— kuzyn

10
Не то, что хотел оператор: он хотел first10, а не latest.
— Timo

1
@Timo, вполне возможно, да, но вопрос, как указано, открыт для интерпретации, и многие люди, похоже, в конечном итоге голосуют за мой ответ только из-за этих открытых различий. Так что, хотя я технически согласен с вами, я полагаю, давайте оставим все как есть ;-) Среди технически правильных предложений мне больше всего нравится комментарий Торека к принятому ответу.
— kostix 07

@kostix «Как показать первые 10 коммитов в git от начала до конца», насколько я понимаю, «не подлежит интерпретации». Очевидно, он требует первых 10 коммитов, а не последних .
— Бобби Джек

30

Вот мой подход,

Чтобы получить первые 10 коммитов:

git log -n 10

-n - число

Дополнительно Чтобы получить следующие 10 коммитов, пропустите первые 10:

git log --skip=10 -n 10

Я думаю, это должен быть принятый ответ. Использование tail приведет к тому, что --graph перестанет работать в журнале git
— Relief.melone

Это должен быть принятый ответ. работает как шарм для меня
— Doogle

вы также теряете цвет шрифта на консоли, используя tail. это правильный ответ
— CESCO

14

Чтобы получить последние 10 коммитов:

git log HEAD~10..HEAD

Чтобы получить их в порядке от самого старого к новому:

git log --reverse HEAD~10..HEAD

Обратите внимание: если есть слияния, это может показать более 10 коммитов; добавьте, --first-parentесли вы хотите пройти только через первого родителя каждой ветви.

Для получения более подробной информации см. Документацию для git rev-list.


Изменить: вы уже получили полезный ответ выше, чтобы «показать коммиты в начале истории» (опять же, см. Предупреждения о нескольких неподключенных DAG фиксации в репо). Но вы также можете сделать, например:

git log --no-walk `git rev-list HEAD | tail -n 10`

а также:

git log --no-walk `git rev-list --reverse HEAD | head -n 10`

в зависимости от того, в каком порядке вы хотите получить результаты.


Спасибо за ответ. Но мне нужны не последние 10 коммитов, а первая. Чтобы быть конкретным, если фиксация - ABCDEFG (HEAD). Как записать ABC и как записать C по индексу 2?
— йохан чжоу

Ой! Нет никакой гарантии, что есть единственная «первая фиксация», но если есть, см. Добавленную ссылку @CharlesB.
— torek

Способ можно сработать. любым естественным способом? git log --pretty = oneline | wc -l git log HEAD ~ <Число минус один или индекс>
— yohan zhou

Спасибо за ответ. Это то, что мне нужно, чтобы избежать опций стиля '-10' в моих псевдонимах git. которые принимают числовые аргументы.
— vicTROLLA

11

лучший результат достигается при сочетании обоих лучших ответов:

git log --pretty=oneline -10

1
Спасибо, я использую это как псевдоним git, чтобы быстро отображать последние коммиты, не заполняя терминал. Я назвал псевдоним lkj = log --pretty=oneline --abbrev-commit -10. Теперь я понимаю, что это не отвечает на вопрос ОП, но я пришел сюда в поисках простого переключателя чисел.
— Paul Rougieux

4

Просто регистрируйте все в обратном порядке -1 означает перечисление одного журнала

git log  --reverse -1

3

я бы использовал ниже простую команду синтаксиса;

git log -10 --oneline

1
Думаю, это самый эффективный способ!
— Nishant,

0

Потому что ... подробнее: p

  1. Как показать первые 10 коммитов в git от начала до конца. (без отделения)
  2. Как указать индекс фиксации и зарегистрировать его. (покажите второй или третий)

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

git log -g --pretty=oneline | tail -10

<sha> HEAD@{###}: action: summary (old)
<sha> HEAD@{###}: action: summary (older)
...
<sha> HEAD@{###}: action: summary (oldest)
  • -gis --walk-reflogsВместо того, чтобы идти по цепочке предков фиксации, пройдитесь по записям журнала reflog.q
  • добавить |cut -d ' ' -f 2|tr -d ':' > logв журнал только индекс фиксации reflog.

Ниже будут показаны самые ранние предки текущей извлеченной ветви.

git log --reverse --pretty=oneline | head -10 | cat -n

1 <sha> summary (oldest)
2 <sha> summary (second)
  • --reverse Выведите коммиты в обратном порядке.
  • Нельзя использовать просто -n 10или -10так как он ломается--reverse
  • cat -n добавляет номера строк (индекс фиксации?)


0

Если кому-то нужно больше, чем просто однострочный журнал git:

git log --reverse | awk 'NR>1 {print last} {last=$0}; /^commit/ && ++c==11{exit}'

где 11в конце должно быть установлено 1больше, чем количество коммитов, которое вы хотите.

Как здесь указано, git log --reverse -n 10не работает так, как вам нужно. ( Я полагаю, это должно быть некоммутативным, чтобы дать вам возможность выбирать первые 10 коммитов в обратном порядке или последние 10 коммитов 🤪)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.