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

91

Два вопроса:

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

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

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

Йохан Чжоу
источник
прокрутите до ответа @kostix
Мухаммад Умер

Ответы:

60

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

git log  --pretty=oneline | tail -n 10 
CharlesB
источник
Большой! Вот что ищу. Спасибо @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 коммитов 🤪)

Кэмерон Стоун
источник