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.