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.