Пошук уроків, статей та іншого контенту
Досліджуйте історію commit і фільтруйте її за автором, датою, повідомленням, файлами та діапазоном commit.
Команда git log показує коміти поточної гілки від найновішого до найстарішого:
git logУ типовому виведенні для кожного коміту відображаються:
ідентифікатор коміту;
автор;
дата;
повідомлення коміту.
У реальному проєкті історія може містити сотні або тисячі комітів. Фільтри допомагають швидко знайти:
коміти конкретного розробника;
зміни за певний період;
коміти з потрібним словом у повідомленні;
зміни конкретного файла;
різницю між двома гілками або комітами.
Для короткого списку комітів використовуйте --oneline:
git log --onelineПриклад результату:
a13f2c1 Add validation for email
7b82d90 Fix login error message
e4c1a77 Create login formОпція --decorate додає назви гілок і тегів:
git log --oneline --decorateДля візуального відображення гілок використовуйте --graph:
git log --oneline --decorate --graph --all--graph показує структуру гілок символами;
--all додає коміти всіх локальних гілок, а не лише поточної;
--decorate показує посилання на гілки та теги.
Ця комбінація часто є найзручнішим способом швидко оглянути історію:
git log --graph --oneline --decorate --all--prettyОпція --pretty або її короткий варіант --format дає змогу вибрати поля коміту:
git log --format="%h %an %ad %s" --date=shortТут використовуються такі специфікатори:
%H — повний ідентифікатор коміту;
%h — скорочений ідентифікатор;
%an — ім’я автора;
%ae — email автора;
%ad — дата автора;
%cn — ім’я того, хто створив коміт у репозиторії;
%cd — дата створення коміту в репозиторії;
%s — перший рядок повідомлення.
Наприклад, для компактного списку з автором:
git log --format="%h %an: %s"Формат дати можна змінити опцією --date:
git log --date=short --format="%h %ad %s"Можливі значення --date включають short, iso, relative та інші формати, які підтримує Git.
Щоб знайти коміти, створені певним автором, використовуйте --author:
git log --author="Olena"Git шукає заданий шаблон в імені або email автора. Тому можна вказати частину імені:
git log --author="olena@example.com"або регулярний вираз:
git log --author="Olena|Oleh" --onelineЦя команда знайде коміти авторів, чиє ім’я містить Olena або Oleh.
За потреби можна окремо фільтрувати за особою, яка записала коміт у репозиторій:
git log --committer="Admin"У більшості звичайних комітів автор і committer однакові. Вони можуть відрізнятися, наприклад, коли одна людина створила зміни, а інша застосувала їх до репозиторію.
Для обмеження історії часовим проміжком використовують:
--since або --after — початкова дата;
--until або --before — кінцева дата.
Наприклад:
git log --since="2025-01-01" --until="2025-01-31" --onelineКоманда покаже коміти за січень 2025 року.
Можна використовувати відносні дати:
git log --since="2 weeks ago"git log --since="yesterday"git log --since="2025-03-01" --until="2025-03-15 23:59"Для зручного перегляду дати часто поєднують із власним форматом:
git log \
--since="2025-01-01" \
--until="2025-03-31" \
--date=short \
--format="%h %ad %an: %s"Опція --grep шукає текст у повідомленні коміту:
git log --grep="login" --onelineПошук за замовчуванням не враховує регістр у багатьох типових сценаріях, але для явного ігнорування регістру можна використати -i:
git log --grep="login" -i --onelineМожна шукати коміти з кількома умовами. Кілька опцій --grep за замовчуванням об’єднуються через логічне «АБО»:
git log --grep="login" --grep="auth" --onelineЦя команда знайде коміти, повідомлення яких містять login або auth.
Щоб вимагати одночасного виконання всіх умов --grep, додайте --all-match:
git log \
--all-match \
--grep="login" \
--grep="validation" \
--onelineТепер у повідомленні коміту мають бути обидва шаблони.
Щоб переглянути лише коміти, які змінювали конкретний файл, укажіть шлях після --:
git log --oneline -- src/auth/login.js-- відділяє параметри git log від шляхів. Це важливо, якщо назва файла може бути схожою на опцію Git.
Для кількох файлів:
git log --oneline -- src/auth/login.js src/auth/session.jsДля каталогу:
git log --oneline -- src/auth/Git покаже коміти, які змінювали файли в цьому каталозі.
Фільтри можна комбінувати. Наприклад, знайти коміти конкретного автора, які змінювали файл:
git log \
--author="Olena" \
--oneline \
-- src/auth/login.jsЯкщо файл перейменували, звичайний пошук за новою назвою може не показати історію до перейменування. Для одного файла можна використати --follow:
git log --follow --oneline -- src/auth/login.js--follow відстежує перейменування файла в його попередню назву. Ця опція призначена для одного файла, а не для списку шляхів або каталогу.
git log може показувати не лише повідомлення, а й статистику змінених файлів:
git log --stat --onelineДля кожного коміту Git покаже:
назви змінених файлів;
кількість доданих рядків;
кількість видалених рядків.
Опція -p або --patch показує повний diff кожного коміту:
git log -p -- src/auth/login.jsЦе корисно, коли потрібно зрозуміти, як файл змінювався крок за кроком.
Щоб переглянути лише один конкретний коміт разом із його змінами:
git show a13f2c1git log відповідає на питання «які коміти були», а git show зручно використовувати для детального перегляду одного знайденого коміту.
Git дає змогу переглядати історію між двома посиланнями: комітами, гілками або тегами.
A..BЗапис:
git log A..Bозначає:
показати коміти, доступні з
B, але не доступні зA.
Наприклад:
git log main..feature/login --onelineКоманда покаже коміти гілки feature/login, яких немає в main.
Зворотний напрямок покаже коміти main, яких немає у feature-гілці:
git log feature/login..main --onelineЦе корисно перед злиттям гілки, щоб перевірити, які коміти буде додано.
A...BТри крапки означають симетричну різницю:
git log main...feature/login --onelineКоманда покаже коміти, які належать лише одній із двох гілок, але не спільній історії.
Щоб побачити, з якої сторони походить кожен коміт, додайте --left-right:
git log --left-right --oneline main...feature/loginУ виведенні:
< позначає коміт, доступний лише з першого посилання;
> позначає коміт, доступний лише з другого посилання.
Теги також можна використовувати як межі:
git log v1.0.0..v2.0.0 --onelineЦе покаже коміти після v1.0.0, які входять до історії v2.0.0.
Фільтри можна комбінувати в одному запиті. Наприклад, команда нижче шукає коміти:
у гілці feature/login;
яких немає в main;
автора Olena;
за останній місяць;
зі словом validation у повідомленні;
які змінювали файли в src/auth/.
git log \
main..feature/login \
--author="Olena" \
--since="1 month ago" \
--grep="validation" \
--oneline \
-- src/auth/Фільтри діапазону, автора, дати, повідомлення та шляхів застосовуються одночасно. Тому результат буде значно вужчим, ніж результат кожного фільтра окремо.
Нижче наведено послідовність команд для невеликого локального репозиторію. Вона створює кілька комітів і демонструє різні варіанти пошуку.
#!/usr/bin/env bash
set -e
# Створюємо тимчасовий репозиторій
repo_dir="$(mktemp -d)"
cd "$repo_dir"
git init -q
git config user.name "Olena Developer"
git config user.email "olena@example.com"
mkdir -p src/auth
printf "export function login() {}\n" > src/auth/login.js
git add src/auth/login.js
git commit -q -m "Create login form"
printf "export function login(email) {\n return Boolean(email);\n}\n" > src/auth/login.js
git add src/auth/login.js
git commit -q -m "Add email validation"
printf "export function logout() {}\n" > src/auth/logout.js
git add src/auth/logout.js
git commit -q -m "Add logout action"
# Усі коміти у скороченому форматі
git log --oneline
# Коміти, у повідомленні яких є слово validation
git log --grep="validation" --oneline
# Коміти, які змінювали login.js
git log --oneline -- src/auth/login.js
# Виведення з іменем автора та датою
git log --format="%h %an %ad: %s" --date=short
printf "\nРепозиторій створено: %s\n" "$repo_dir"Скрипт можна зберегти у файл і виконати в терміналі. Після цього кожен приклад git log працюватиме в створеному репозиторії.
--Неправильно:
git log src/auth/login.jsУ багатьох випадках Git розпізнає шлях і без --, але це може спричинити неоднозначність із параметрами.
Надійний варіант:
git log -- src/auth/login.jsКоманда:
git log feature..mainпоказує коміти main, яких немає у feature, а не навпаки.
Перед виконанням запитайте себе:
Яка гілка має містити коміти, які я хочу побачити?
Її потрібно вказати праворуч від ...
--author шукає автора змін, а не обов’язково людину, яка записала коміт у репозиторій. Для другого випадку використовуйте:
git log --committer="Ім’я"--grep шукає в кодіОпція --grep переглядає лише повідомлення комітів. Вона не шукає слово у файлах або diff.
git log --grep="login"Якщо потрібно досліджувати зміни конкретного файла, вкажіть шлях:
git log -p -- src/auth/login.jsЗвичайна команда git log показує історію поточної гілки. Коміти інших локальних гілок можуть не потрапити до результату.
Для огляду всіх локальних посилань використовуйте:
git log --all --oneline --decorate --graphДля першого огляду історії краще використовувати компактний формат:
git log --oneline --max-count=20--max-count=20 або короткий запис -n 20 обмежує кількість комітів:
git log -n 20 --onelinegit log показує історію комітів поточної гілки.
--oneline, --graph, --decorate роблять виведення компактним і наочним.
--author фільтрує коміти за автором.
--since і --until обмежують історію за датою.
--grep шукає текст у повідомленнях комітів.
git log -- шлях показує коміти, які змінювали файл або каталог.
--follow допомагає відстежити історію перейменованого файла.
A..B показує коміти B, яких немає в A.
A...B показує коміти, що належать лише одній із двох історій.
Фільтри можна поєднувати для точного пошуку в історії.