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?



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 

Ś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.

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

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.


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

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

3

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

git log -10 --oneline

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?)


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ń 🤪)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.