Ответ
Я активно использую 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 сам прогонялся — а то некоторые товарищи код форматируют, будто хуй с горы писал. В общем, инструмент мощный, но если с ним по-дурацки, то будет вам хиросима, а не история изменений.