Расскажите про опыт работы с Git.

Ответ

Я активно использую Git в ежедневной работе, преимущественно через командную строку. Мой опыт включает:

  • Стандартный workflow: создание feature-веток, коммиты, push, создание pull/merge request'ов и участие в код-ревью на платформах типа GitLab или GitHub.
  • Решение сложных ситуаций: разрешение конфликтов слияния, интерактивный rebase (git rebase -i) для "причесывания" истории, git cherry-pick для переноса отдельных коммитов.
  • Инструменты для анализа: git log --graph --oneline, git diff, git bisect для поиска регрессий.

Пример типичного рабочего процесса для новой функциональности:

# Создание и переход на новую ветку
$ git checkout -b feature/optimize-rendering

# Внесение изменений, затем их индексация и коммит
$ git add src/renderer/
$ git commit -m "perf: replace std::list with std::vector in render queue"

# Синхронизация с основной веткой и отправка
$ git pull origin main --rebase
$ git push origin feature/optimize-rendering

Я также настраивал .gitignore для C++ проектов (исключая бинарные файлы, папки сборки вроде build/, CMakeCache.txt) и работал с git hooks для автоматического форматирования кода (clang-format) перед коммитом.

Ответ 18+ 🔞

Слушай, ну про гит я тебе могу рассказывать дохуя, потому что с ним каждый день, как с членом, возиться приходится. В основном через консоль, потому что всякие там графические штуки — это для мартышлюшек, которые боятся командной строки. Опыт, бля, набит шишками, когда всё накрывалось медным тазом и приходилось выкручиваться.

Вот смотри, что я обычно делаю, как нормальный человек:

  • Обычная рутина: завел себе ветку под фичу, наделал коммитов, залил на сервер, создал пулл-реквест и пошел в код-ревью, где все друг другу мозги выносят. Стандарт, хуле.
  • А вот когда пиздец начинается: это конфликты слияния, когда два идиота правили одну и ту же строчку. Или вот git rebase -i, чтобы историю причесать, а то там коммит «пофиксил баг», а через два «ещё раз пофиксил баг» — терпения ноль, ебать. git cherry-pick — вообще магия, когда нужно выдрать один коммит из другой ветки, как будто его там и не было.
  • Чтобы не сойти с ума: git log --graph --oneline — лучший друг, чтобы понять, кто тут наворотил веток, будто ёлка. git diff — посмотреть, что натворил. git bisect — это когда баг всплыл, а кто его закоммитил — хуй знает, вот и ищешь виноватого, как собака.

Вот как это обычно выглядит, когда я новую фичу пилю:

# Создание и переход на новую ветку
$ git checkout -b feature/optimize-rendering

# Внесение изменений, затем их индексация и коммит
$ git add src/renderer/
$ git commit -m "perf: replace std::list with std::vector in render queue"

# Синхронизация с основной веткой и отправка
$ git pull origin main --rebase
$ git push origin feature/optimize-rendering

А ещё, бля, вечная история с .gitignore для C++. Если его не настроить, то потом в репозитории овердохуища мусора: бинарники, папки build/, всякие CMakeCache.txt. Выглядит потом репа, как срака после праздника. И хуки настраивал, чтобы перед коммитом clang-format сам прогонялся — а то некоторые товарищи код форматируют, будто хуй с горы писал. В общем, инструмент мощный, но если с ним по-дурацки, то будет вам хиросима, а не история изменений.