log first 10 у git


91

Два питання:

  1. Як показати перші 10 комітів у git від початку до кінця. (немає гілки)
  2. Як вказати індекс коміту та зареєструвати його. (показати другий чи третій)

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

Але мені потрібно запитувати від початку до кінця, чи можливо це?



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

Відповіді:


60

Просто реєструйте все за допомогою одного формату рядка і отримайте результат:

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

Чудово! Це те, що я шукаю. Tks @CharlesB.
Йохан Чжоу,

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

16
tailздається, втрачає приємне забарвлення, яке я отримую на своїй git-консолі. Передавання такого параметра, як git log --oneline -10у іншій відповіді, працює, як я очікував.
James Hulse

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

8
& не псується з git-форматуванням / забарвленням. Це повинна бути прийнята відповідь x100
kuzyn

10
Не те, що хотів опер: він хотів first10, а не 10 latest.
Тимо

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

@kostix "Як показати перші 10 комітів у git від початку до кінця", що стосується мене, це не "відкрито для інтерпретації". Це, очевидно, прохання про перші 10 комісій, не останні .
Боббі Джек,

30

Ось мій підхід,

Щоб отримати перші 10 комітів:

git log -n 10

-n - це число

Додатково Щоб отримати наступні 10 коміту, пропустіть перші 10:

git log --skip=10 -n 10

Я думаю, що це має бути прийнятою відповіддю. Використання хвоста призведе до того, що --graph перестане працювати в git log
relief.melone

Це повинна бути прийнята відповідь. для мене працює як шарм
Doogle

ви втратите колір шрифту на консолі, використовуючи також хвіст. це правильна відповідь
Сеск

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`

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


Tks за вашу відповідь. Але мені потрібні не останні 10 комітів, а перший. Якщо бути конкретним, якщо коміт - ABCDEFG (HEAD). Як реєструвати ABC і як реєструвати C за індексом 2?
Йохан Чжоу,

О! Немає гарантії, що існує одна "перша комітація", але якщо вона є, перегляньте посилання @CharlesB.
torek

Шляхом може бути робота. будь-яким природним способом? git log --pretty = oneline | wc -l git log HEAD ~ <число мінус
одиниця

Дякую за відповідь. Це те, що мені потрібно було, щоб уникнути опцій стилю '-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


0

Тому що ... детальніше: с

  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)
  • -gє --walk-reflogsЗамість того , щоб ходити фіксації родоводу ланцюга, ходити reflog entries.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.