Какие основные команды Git вы используете?

Ответ

Основные команды Git для ежедневной работы:

Начало работы и базовые операции:

  • git init — инициализирует новый репозиторий.
  • git clone <url> — клонирует удаленный репозиторий.
  • git add <file> или git add . — добавляет изменения в индекс (staging area).
  • git commit -m "сообщение" — фиксирует изменения из индекса в репозиторий.
  • git status — показывает состояние рабочей директории и индекса.

Ветвление и слияние:

  • git branch — показывает список веток.
  • git checkout -b <branch_name> — создает новую ветку и переключается на нее.
  • git checkout <branch_name> — переключается на существующую ветку.
  • git merge <branch_name> — сливает указанную ветку в текущую.
  • git rebase <branch_name> — перебазирует текущую ветку на указанную (изменяет историю).

Синхронизация с удаленным репозиторием:

  • git push origin <branch_name> — отправляет локальные коммиты в удаленную ветку.
  • git pull origin <branch_name> — забирает изменения из удаленной ветки и сливает с текущей ( = git fetch + git merge).
  • git fetch origin — забирает изменения из удаленного репозитория, но не сливает их.

Просмотр истории и отмена изменений:

  • git log --oneline --graph — компактный вывод истории с визуализацией ветвления.
  • git diff — показывает неиндексированные изменения.
  • git diff --staged — показывает изменения, добавленные в индекс.
  • git restore <file> — отменяет изменения в файле (до индексации).
  • git reset --soft HEAD~1 — отменяет последний коммит, оставляя изменения проиндексированными.

Типовой рабочий процесс:

# Клонирование репозитория
git clone https://github.com/example/project.git
cd project

# Создание ветки для новой функциональности
git checkout -b feature/new-login

# Внесение изменений, добавление и коммит
git add .
git commit -m "Add new login form"

# Отправка ветки на сервер
git push origin feature/new-login
# Далее создается Pull Request (Merge Request) в интерфейсе GitHub/GitLab

Ответ 18+ 🔞

А, ну вот, опять этот ваш Гит, ёпта! Сидит народ, как мартышлюшки, тыкает в консоль, а нихуя не понимает, что творит. Слушай, давай я тебе по-человечьи, без этих заумных мануалов, объясню, что там к чему. Главное — не перепутай, а то потом будешь, как Герасим, с мешком в руках стоять и «Му-му» мычать.

С чего начинается этот цирк:

  • git init — это ты взял пустую папку и крикнул: «Так, блядь, тут теперь священное место для кода будет!». Всё, репа создана.
  • git clone <url> — это ты пришёл к соседу, у которого уже всё готово, и спиздил у него всю папку целиком. Удобно, нехуй делать.
  • git add . — вот ты накодил какую-то хуйню. Этой командой ты говоришь: «Так, всё, что я тут наворотил, я готов отдать на суд истории. Запоминай».
  • git commit -m "сообщение" — а это ты уже официально ставишь печать: «Всё, блядь, я это сделал. Вот причина, почему я это сделал». Пиши нормально, а не «чё-то поправил», а то потом сам себя проклянёшь.
  • git status — это твой главный доносчик. Он тебе шепчет: «Э, чувак, блядь, тут у тебя файлы болтаются, не добавлены, а тут вот коммитнуть можно». Спрашивай его почаще, доверия ебать ноль к себе самому.

Ветки, или как не перепихнуться в одной куче:

  • git branch — смотришь, какие у тебя вообще сценарии развития событий (ветки) есть. Как в «Игре престолов», только с кодом.
  • git checkout -b feature/new-login — это ты решил: «Хуй с ним, с основной линией, я тут свою отдельную авантюру замучу». Создал новую ветку и сразу на неё перепрыгнул.
  • git checkout main — это когда с авантюры надоело, и ты вернулся в стабильную, скучную реальность.
  • git merge feature/new-login — вот ты свою авантюру (ветку) довёл до ума и теперь пытаешься впихнуть её обратно в основную ветку. Может пройти гладко, а может начаться пиздец с конфликтами.
  • git rebase main — это для смелых. Ты берёшь свою ветку и подтираешь ей историю, пересаживая её на свежий «ствол». Красиво, но если накосячишь — история изменится, и все, кто с тобой работал, взвоют.

Общение с миром (или с сервером):

  • git push origin feature/new-login — это ты выкрикиваешь в окно: «Эй, мир, смотрите, что я сделал! Забирайте мою ветку!».
  • git pull origin main — это ты выглядываешь в окно и забираешь то, что накричали тебе другие. Автоматом пытается склеить с твоим.
  • git fetch origin — а это ты просто выглянул, посмотрел, что там нового накричали, но ничего к себе в дом пока не тащишь. Просто разведка.

Когда всё пошло по пизде и надо откатываться:

  • git log --oneline --graph — твоя машина времени. Смотришь, кто, когда и какую дичь коммитил. График — чтобы понять, кто в кого вливался.
  • git diff — «Ну-ка, покажи мне, блядь, что я тут такого страшного натворил, прежде чем я это addну».
  • git restore <file> — «Всё, я передумал! Откати этот файл к тому, каким он был в последнем сохранённом состоянии!». Спасательная операция.
  • git reset --soft HEAD~1 — «Э-э-э, последний коммит был ошибкой, я мудак. Давай я его отменю, но изменения пусть останутся готовыми к новому коммиту». Как стереть надпись на заборе, но краску оставить.

И как это всё выглядит в жизни, без пафоса:

# Украл проект с гитхаба (ничего, все так делают)
git clone https://github.com/example/project.git
cd project

# Отжался от основной ветки, чтобы твои эксперименты всех не сломали
git checkout -b feature/new-login

# Написал какую-то дичь, добавил её и подписался под ней
git add .
git commit -m "Add new login form (не бейте, я проверю завтра)"

# Высунул свою ветку на всеобщее обозрение и осмеяние
git push origin feature/new-login
# А дальше идёшь на GitHub/GitLab и создаёшь Pull Request. Это типа: «Ребята, посмотрите на мой код, если не гонит, примите».

Вот и вся магия. Главное — не бздеть и делать commitы часто, мелко и с понятными сообщениями. А то потом будешь как тот мудак, который месяц не коммитил, а потом пытается понять, какая из тысячи изменённых строк всё сломала. Удачи, волнение ебать!