Dwa pytania:
- Jak pokazać pierwsze 10 commitów w git od początku do końca. (bez gałęzi)
- 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?
Odpowiedzi:
Po prostu zapisz wszystko w formacie jednej linii i dostosuj wynik:
źródło
git rev-list HEAD | tail -n 10
aby 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).tail
wydaje się, że tracę ładną kolorystykę, którą otrzymuję w mojej konsoli git. Podanie parametru, jakgit log --oneline -10
w drugiej odpowiedzi, działa zgodnie z oczekiwaniami.Pokaże 10 ostatnich zatwierdzeń zgodnych ze specyfikacją wersji (brakująca specyfikacja oznacza „wszystkie zatwierdzenia”).
Zobacz stronę podręcznika:
Sekcja
Commit Limiting
źródło
tail
dostępności na Twojej platformie.first
10, a nielatest
.Tutaj moje podejście,
Aby uzyskać pierwsze 10 zatwierdzeń:
-n jest liczbą
Dodatkowe Aby uzyskać następne 10 zatwierdzeń, pomiń pierwsze 10:
źródło
Aby uzyskać ostatnie 10 zatwierdzeń:
Aby uzyskać je w kolejności od najstarszych do najnowszych:
Zauważ, że jeśli są scalenia, może to pokazać więcej niż 10 zatwierdzeń; dodaj,
--first-parent
jeś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 .:
i:
w zależności od kolejności, w jakiej chcesz uzyskać wyniki.
źródło
najlepszy wynik pochodzi z połączenia obu najlepszych odpowiedzi:
źródło
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.Po prostu zarejestruj wszystko w odwrotnej kolejności -1 oznacza wyświetlenie jednego dziennika
źródło
użyłbym poniżej prostej komendy składniowej;
źródło
Ponieważ ... więcej szczegółów: s
Przez (brak gałęzi) możesz pytać
reflog
raczej 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
-g
jest--walk-reflogs
Zamiast chodzić po łańcuchu przodków zatwierdzenia, przejdź do wpisów reflog .q|cut -d ' ' -f 2|tr -d ':' > log
aby 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
--reverse
Wypisz zatwierdzenia w odwrotnej kolejności.-n 10
lub-10
ponieważ się psuje--reverse
cat -n
dodaje numery wierszy (indeks zatwierdzenia?)źródło
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
11
na końcu powinno być ustawione1
więcej niż liczba zatwierdzeń, które chcesz.Jak tutaj wskazuje,
git log --reverse -n 10
nie 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ń 🤪)źródło