🌍
Привет мир! 👋
Сегодня рассмотрим 👀 рабочий кейс, связанный с историей коммитов.
Как найти коммит в котором были удалены, добавлены или изменены какие-либо данные❓
🚀
Мотивация Иногда для совершения корректных действий в настоящее время c вашим кодом, необходимо знать предысторию файла или конкретной строчки в файле. Почему этот кусочек был удален или добавлен? Или почему в том или ином месте применены такие ключи? И еще много чего…
📖
История примера Вы работаете с проектом, у которого тысячи и тысячи коммитов, в котором структура проекта менялась не один раз, методы претерпевали десятки изменений или вообще весь проект в одно мгновение переехал с
JS на
TS и так далее.
И вдруг в этом самом проекте вам прилетела задача на исправление бага.
Почему-то на одной из страничек, на одной из форм, нет селекта❓🤯
- хмм…
"Да это же изи фикс!" - подумаете вы, радостно 😜 добавите селект, любезно взятый из другой формы, проверите что все отображается корректно и с чувством выполненного долга, закроете задачку.
❗
НО❗
Как показывает практика, всегда нужно понимать причинно-следственную 🔗 связь.
❓ С какой целью убрали? Почему только тут, а не во всем проекте ? Когда? А может быть это вовсе не бага, а фича?
👉 Ведь в ответах на эти вопросы, кроется
истина…
Может быть так и должно работать? Или может быть раз уж тут нужно показывать, то есть и еще места которые тестеры не нашли⁉️
💻 Как раз тут и возникает необходимость пошатать старые-престарые коммиты.
🛠️
Практика❌ Я не пользуюсь красивыми и может быть весьма удобными графическими утилитами по работае с
GIT (если у вас есть что-то классное, пишите в комментариях👇).
Чтобы найти 🔎
commit, в котором были произведены какие-то действия над данными которые я сейчас изучаю, пользуюсь следующими командами:
git log -S "isShowSelectV5" -- path/to/file.js
или
git log -G "label={translate" -- path/to/file.js
➖
git log: команда для отображения истории коммитов в репозитории.
➖
S ("pickaxe search") "isShowSelectV5": поиск коммитов, в которых указанная строка
("isShowSelectV5") была добавлена или удалена.
‼️
Git ищет изменения в коммитах, которые точно соответствуют этой строке.
➖
G "label={translate": Поиск всех коммитов, где происходили изменения, в которых содержался текст
"label={translate". В отличие от
-S включает случаи, где строка была не только удалена или добавлена, но и изменена.
➖
path/to/file.js: Указываем путь к файлу или папке, где будет происходить поиск. Это ограничение на поиск измененений, сделанных в этом конкретном файле или папке, вместо того чтобы искать по всему репозиторию.
👇
Пример:📄 Файл
example.js с изменениями в истории
Исходная строка:
const message = "Hello, World!";
Изменения в истории: Коммит A: Добавлена строка.
const message = "Hello, World!";
Коммит B: Строка изменена.
const message = "Hello, Universe!";
Коммит C: Строка удалена.
// Строка удалена
Пробуем поиск с флагом
-Sgit log -S "Hello, World!" -- example.js
✔️ Что
найдёт:
📎 Коммит A, где строка "Hello, World!" была добавлена.
📎 Коммит C, где строка "Hello, World!" была удалена.
❌ Что
не найдёт:
📎 Коммит B, где строка была изменена на "Hello, Universe!", потому что
S ищет только точное добавление или удаление указанного текста.
Пробуем поиск с флагом
-Ggit log -G "Hello" -- example.js
✔️ Что
найдёт:
📎 Коммит A, где строка "Hello, World!" была добавлена (содержит "Hello").
📎 Коммит B, где строка была изменена на "Hello, Universe!" (текст "Hello" остался).
📎 Коммит C, где строка "Hello, World!" была удалена (текст "Hello" исчез).
👉 Итог: Не ленитесь определять причинно-следственную связь. Ваши усилия не останутся незамеченными, так как вы будете экономить деньги компании.
💬 Делитесь своим мнением в комментариях👇! Если вам понравилась статья, не забудьте поставить лайк! 👍
#GIT