7 команд в GIT которые реально экономят время и нервы
Каждый, кто хоть раз работал с Git, знает это ощущение: запутался в ветках, не понял, где сломался билд, или случайно откатил не то изменение. Время поджимает, документация не спасает, а привычные способы почему-то только добавляют хаоса. Поэтому мы собрали 7 команд, которые реально упрощают работу с Git.
2К открытий5К показов
1. git bisect — быстро находим ломающийся коммит
Допустим, у нас сломался билд после релиза версии v2.0.0. Последняя стабильная версия — v1.2.0. Проблема появилась где-то между ними. В такой ситуации можно искать причину наугад, а можно воспользоваться git bisect. Эта команда использует бинарный поиск, чтобы найти самый первый коммит с багом:
Мы запускаем git bisect start, далее, при помощи git bisect bad и git bisect good, указываем диапазон коммитов, от нерабочего до стабильного. Git сам начнёт переключать нас между промежуточными версиями. Например, если коммитов 50, то он отправит нас на 25-й.
Далее мы проверяем этот коммит: если баг сохраняется, то отмечаем его как «плохой» с помощью git bisect bad; если баг исчез — отмечаем «хороший» через git bisect good. Git снова разделит диапазон пополам и отправит на следующий коммит для проверки. Так продолжается до тех пор, пока не останется один коммит, который внёс баг.
2. git switch — переключаемся между ветками без checkout
В любой активной разработке приходится прыгать между разными задачами. Раньше для этого использовали git checkout. Команда по возможностям напоминает швейцарский нож: она может не только переключать между ветками, но и заменять файлы, создавать новые ветки и даже возвращать отдельные коммиты. Из-за такой универсальности git checkout часто путает новичков (да и опытных разработчиков тоже), можно легко потерять все изменения из-за случайной ошибки.
В 2019 году в Git появилась отдельная команда — git switch. Она делает ровно одну вещь: быстро и безопасно переключает между ветками или создаёт новую. Ошибиться здесь сложно.
Примеры использования:
В этом примере мы сначала быстро переключаемся на ветку «new-login» с новой фичей, чтобы что-то проверить, а потом одной командой возвращаемся обратно — продолжать багфикс. Если появляется ещё одна срочная задача, заводим для неё отдельную ветку «urgent-redirect» с помощью -c и сразу попадаем в нужное место.
Такой подход экономит время и избавляет от путаницы, которая раньше возникала с многофункциональным git checkout.
3. git restore — откатываем изменения для конкретных файлов
Допустим, мы внесли кучу изменений, что-то пошло не так — и хочется вернуть всё обратно, но только для определённых файлов. Использовать git reset или checkout слишком рискованно: легко случайно стереть не то, что нужно. В таких случаях пригодится команда git restore.
Она работает как с рабочей директорией, так и с индексом, не затрагивая остальной проект.
Примеры использования:
В первом случае файл main.c возвращается к состоянию последнего коммита. Во втором мы убираем из индекса все файлы с расширением .js, но наши изменения остаются в рабочей директории. Третий вариант позволяет вернуть все файлы к состоянию предыдущего коммита, если, например, мы случайно наделали лишних изменений во всём проекте.
4. git rebase — приводим историю в порядок
Иногда хочется привести историю коммитов в порядок: объединить случайные правки, переименовать сообщения и т. д. Команда git rebase -i открывает текстовый интерфейс, где можно управлять списком последних коммитов:
- Объединять несколько в один (squash),
- Менять порядок (pick),
- Редактировать сообщения (reword),
- Вставлять дополнительные команды (exec).
Примеры использования:
Git откроет в редакторе список из последних трёх коммитов, там будет указан их хэш и комментарий:
Мы можем перетасовать коммиты при помощи команды pick, в этом примере мы поменяли верхний и нижний коммиты местами:
Если хотим объединить второй коммит с предыдущим, то можем использовать команду squash:
Теперь оба изменения попадут в один коммит.
Чтобы изменить сообщение у последнего коммита, меняем pick на reword:
После этой команды git предложит ввести новый текст комментария.
Таким образом, за одну операцию можно собрать историю под ключ: объединить, переименовать, проверить — и только потом отправить в общий репозиторий аккуратную, читаемую цепочку коммитов. Однако не рекомендуется использовать git rebase для командной работы, так как стирание истории может запутать других разработчиков и привести к конфликтам в разных версиях проекта.
5. git stash — прячем незаконченные правки, чтобы вернуться к ним позже
Бывает, что срочно нужно переключиться на другую задачу или ветку, но текущие изменения ещё не готовы к коммиту. Не хочется захламлять историю, да и откладывать задачу опасно — можно забыть, где остановился. Для этого в Git есть команда git stash, которая убирает все незавершённые правки «под ковёр» до лучших времён.
Пример использования:
В первом примере мы сохраняем все незакоммиченные изменения при помощи git stash save, давая им осмысленное имя. Так мы сможем вернуться к правкам позже.
Команда git stash list показывает все «стеши» — сохранённые правки, которые нам надо применить.
git stash apply возвращает изменения в рабочую директорию, но не удаляет стеши из списка. Ещё есть git stash pop, который делает то же самое, но сразу удаляет стеши.
6. git cherry-pick — добавляем только нужные коммиты
Иногда в соседней ветке уже есть нужный багфикс или маленькая фича, а добавлять её всю не хочется — появится куча лишних изменений. Для таких случаев подходит git cherry-pick: эта команда позволяет взять конкретный коммит (или диапазон коммитов) и аккуратно «приземлить» его в свою ветку.
Примеры использования:
Сначала мы применяем команду git cherry-pick, после которой указываем хэш нужного коммита (например, f1a2b3c). Git найдёт этот коммит в истории и «применит» его изменения к текущей ветке — как будто мы только что их закоммитили сами.
Если нужно забрать сразу несколько коммитов, можно указать диапазон через две точки «..» как в примере: git cherry-pick 1a..4d. Важно: команда возьмёт все коммиты после 1a, но не сам 1a.
Иногда при cherry-pick возникают конфликты — это нормально. В таком случае Git попросит разрешить эти конфликты вручную. После того как это сделано, мы можем ввести команду git cherry-pick --continue, чтобы продолжить слияние.
7. git log — визуализируем историю проекта
Когда в проекте появляется несколько веток и десятки коммитов, обычный просмотр истории быстро превращается в путаницу. В такие моменты помогает визуализация истории — чтобы увидеть, где расходились ветки, когда были слияния, и где появился тот самый «пропавший» коммит.
В Git для этого есть команда:
- --graph рисует дерево истории с линиями, которое показывает, где ветки расходятся и сливаются.
- --decorate подписывает ветки и теги прямо в выводе, чтобы сразу было видно, где «main», «feature», релиз.
- --oneline делает вывод лаконичным: каждая запись — одна строка, только хеш и короткое описание.
- --all показывает не только текущую ветку, но и всю историю репозитория.
Писать эту команду неудобно, она слишком длинная, поэтому мы можем создать алиас — короткую версию:
Теперь, чтобы команда сработала, достаточно применить git graph.
Например, если у нас две ветки, которые разошлись, а потом слились, мы увидим вот такой граф:
Звёздочки и линии показывают, где расходились ветки (feature/login отделялась от main), а где обратно слились (Merge).
Метки (например, main, feature/login, tag: v1.0) появляются рядом с коммитами — это и есть результат --decorate.
Все коммиты выстроены по одной строке — это делает схему быстрой для чтения.
Заключение
Освоить Git — значит не просто выучить базовые команды, а знать, как быстро решить типовые проблемы и не тратить время на рутину. Даже одна «правильная» команда может в нужный момент сэкономить время и нервы. А какие команды-git вы используете чаще всего? Напишите в комментариях. Кто знает, может в следующий раз именно ваша подборка появится в будущих материалах.
2К открытий5К показов




