zaloguj pierwsze 10 w git

91

Dwa pytania:

  1. Jak pokazać pierwsze 10 commitów w git od początku do końca. (bez gałęzi)
  2. Jak określić indeks zatwierdzenia i zarejestrować go. (pokaż drugą lub trzecią)

Wiem, że git używa rodzica do łączenia zatwierdzenia, łatwo jest zarejestrować zatwierdzenie od końca do początku. lubić:git log HEAD~10

Ale muszę przesyłać zapytania od początku do końca, czy to możliwe?

yohan zhou
źródło
przewiń do odpowiedzi @kostix
Muhammad Umer

Odpowiedzi:

60

Po prostu zapisz wszystko w formacie jednej linii i dostosuj wynik:

git log  --pretty=oneline | tail -n 10 
Charles B.
źródło
Świetny! Tego właśnie szukam. Tks @CharlesB.
yohan zhou
3
Lub użyj, git rev-list HEAD | tail -n 10aby wyświetlić 10 identyfikatorów do wyświetlenia, które możesz następnie wyświetlić w dowolnym formacie (nie ograniczając się do metody jednowierszowej).
torek
16
tailwydaje się, że tracę ładną kolorystykę, którą otrzymuję w mojej konsoli git. Podanie parametru, jak git log --oneline -10w drugiej odpowiedzi, działa zgodnie z oczekiwaniami.
James Hulse,
4
To jest najwyraźniej twardy sposób uniksowy, lol. Zobacz odpowiedź @kostix.
9301293
1
Wadą tej metody jest to, że widzę tylko moje wypchnięte zatwierdzenia.
Jack '
255
git log -10

Pokaże 10 ostatnich zatwierdzeń zgodnych ze specyfikacją wersji (brakująca specyfikacja oznacza „wszystkie zatwierdzenia”).

Zobacz stronę podręcznika:

git help log

Sekcja Commit Limiting

-<number>, -n <number>, --max-count=<number>
    Limit the number of commits to output.
kostix
źródło
6
proste i nie zależy od taildostępności na Twojej platformie.
tenpn
8
i nie zadziera z formatowaniem / kolorowaniem git. To powinna być akceptowana odpowiedź x100
kuzyn
10
Nie to, czego chciał operator: chciał first10, a nie latest.
Timo,
1
@Timo, całkiem możliwe, że tak, ale powyższe pytanie jest otwarte do interpretacji, a wielu ludzi wydaje się w końcu głosować za moją odpowiedzią tylko z powodu tych otwartych różnic. Więc chociaż technicznie się z wami zgadzam, to chyba nie zmieniajmy ;-) Spośród poprawnych technicznie sugestii najbardziej podoba mi się komentarz treka do zaakceptowanej odpowiedzi.
kostix
@kostix „Jak pokazać pierwsze 10 commitów w git od początku do końca” nie jest „otwarte na interpretację”, jeśli o mnie chodzi. To oczywiście prośba o pierwsze 10 zatwierdzeń, a nie najnowsze .
Bobby Jack
30

Tutaj moje podejście,

Aby uzyskać pierwsze 10 zatwierdzeń:

git log -n 10

-n jest liczbą

Dodatkowe Aby uzyskać następne 10 zatwierdzeń, pomiń pierwsze 10:

git log --skip=10 -n 10
Nayagam
źródło
Myślę, że to powinna być akceptowana odpowiedź. Użycie tail spowoduje, że --graph przestanie działać w git log
relief.melone
To musi być akceptowana odpowiedź. dla mnie działa jak urok
Doogle
tracisz kolor czcionki na konsoli również za pomocą tailu. to jest właściwa odpowiedź
CESCO
14

Aby uzyskać ostatnie 10 zatwierdzeń:

git log HEAD~10..HEAD

Aby uzyskać je w kolejności od najstarszych do najnowszych:

git log --reverse HEAD~10..HEAD

Zauważ, że jeśli są scalenia, może to pokazać więcej niż 10 zatwierdzeń; dodaj, --first-parentjeśli chcesz przejść tylko przez pierwszego rodzica każdej gałęzi.

Więcej szczegółów można znaleźć w dokumentacji git rev-list.


Edycja: Otrzymałeś już użyteczną odpowiedź powyżej, aby „pokazać zatwierdzenia blisko początku historii” (ponownie, zobacz zastrzeżenia dotyczące wielu niepołączonych DAG zatwierdzeń w repozytorium). Ale możesz też zrobić np .:

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

i:

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

w zależności od kolejności, w jakiej chcesz uzyskać wyniki.

torek
źródło
Dziękuję za odpowiedź. Ale nie potrzebuję ostatnich 10 zatwierdzeń, ale pierwszego. Konkretnie, jeśli zatwierdzeniem jest ABCDEFG (HEAD). Jak zalogować ABC i jak zarejestrować C przez indeks 2?
yohan zhou
O! Nie ma gwarancji, że istnieje pojedyncze „pierwsze zatwierdzenie”, ale jeśli jest, zobacz link @CharlesB dodany.
torek
Droga może być pracą. w jakikolwiek naturalny sposób? git log --pretty = oneline | wc -l git log HEAD ~ <liczba minus jeden lub indeks>
yohan zhou
Dziękuję za odpowiedź. Właśnie tego potrzebowałem, aby uniknąć opcji stylu „-10” w moich aliasach git. które akceptują argumenty liczbowe.
vicTROLLA
11

najlepszy wynik pochodzi z połączenia obu najlepszych odpowiedzi:

git log --pretty=oneline -10
andrej
źródło
1
Dzięki, używam tego jako aliasu git, aby szybko wyświetlić ostatnie zatwierdzenia bez wypełniania mojego terminala. Zadzwoniłem do aliasu lkj = log --pretty=oneline --abbrev-commit -10. Teraz zdaję sobie sprawę, że to nie odpowiada na pytanie OP, ale przyszedłem tutaj, szukając prostego przełączania numerów.
Paul Rougieux
4

Po prostu zarejestruj wszystko w odwrotnej kolejności -1 oznacza wyświetlenie jednego dziennika

git log  --reverse -1
nickleefly
źródło
3

użyłbym poniżej prostej komendy składniowej;

git log -10 --oneline
RAVI PATEL
źródło
1
Pomyśl, że to najbardziej efektywny sposób!
Nishant
0

Ponieważ ... więcej szczegółów: s

  1. Jak pokazać pierwsze 10 commitów w git od początku do końca. (bez gałęzi)
  2. Jak określić indeks zatwierdzenia i zarejestrować go. (pokaż drugą lub trzecią)

Przez (brak gałęzi) możesz pytać reflograczej o dany łańcuch przodków niż o dany łańcuch. Poniższe informacje nie mają nic wspólnego z gałęzią, w której się znajdujesz.

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

<sha> HEAD@{###}: action: summary (old)
<sha> HEAD@{###}: action: summary (older)
...
<sha> HEAD@{###}: action: summary (oldest)
  • -gjest --walk-reflogsZamiast chodzić po łańcuchu przodków zatwierdzenia, przejdź do wpisów reflog .q
  • dodaj, |cut -d ' ' -f 2|tr -d ':' > logaby rejestrować tylko indeks zatwierdzeń reflog.

Poniżej zostaną pokazani najwcześniejsi przodkowie aktualnie wyewidencjonowanej gałęzi.

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

1 <sha> summary (oldest)
2 <sha> summary (second)
  • --reverse Wypisz zatwierdzenia w odwrotnej kolejności.
  • Nie można użyć po prostu -n 10lub -10ponieważ się psuje--reverse
  • cat -n dodaje numery wierszy (indeks zatwierdzenia?)

tutaj
źródło
0

W przypadku, gdy ktoś chce czegoś więcej niż tylko git jednowierszowy log:

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

gdzie 11na końcu powinno być ustawione 1więcej niż liczba zatwierdzeń, które chcesz.

Jak tutaj wskazuje, git log --reverse -n 10nie działa tak, jak tego potrzebujesz. ( Przypuszczam, że musiałby być nieprzemienny, aby dać ci możliwość wyboru pierwszych 10 zatwierdzeń w odwrotnej kolejności lub ostatnich 10 zatwierdzeń 🤪)

Cameron Stone
źródło