← Назад к вопросам

Какими командами git пользовался

1.0 Junior🔥 231 комментариев
#Основы Java

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Какими командами git пользовался

Введение

Этот вопрос проверяет, насколько хорошо вы знаете практическое использование Git. Ответ показывает вашу способность работать в командах, управлять версиями кода и разрешать конфликты. Дам развёрнутый ответ от лица опытного разработчика.

Основные категории команд

1. Инициализация и клонирование

Создание нового репозитория

git init                                  # инициализировать локальный репо
git init --initial-branch=main            # создать с main веткой

Клонирование существующего репо

git clone https://github.com/user/repo.git
git clone git@github.com:user/repo.git    # через SSH (рекомендуется)
git clone --depth 1 <url>                 # shallow clone (только последний коммит)
git clone -b develop <url>                # клонировать specific branch

2. Базовые операции (ежедневные)

Проверка статуса

git status                                # видеть изменённые файлы
git status -s                             # короткий формат

Добавление файлов в staging area

git add .                                 # добавить ВСЕ файлы (осторожно!)
git add src/main/java/User.java           # добавить конкретный файл
git add -p                                # interactive staging (выбрать части)
git add -u                                # добавить только обновлённые (не новые)

Коммит

git commit -m "feat: add user authentication"
git commit -m "fix: resolve null pointer exception"  # conventional commits
git commit -am "update"                   # add и commit вместе
git commit --amend                        # изменить последний коммит
git commit --amend --no-edit              # amend без изменения сообщения

Просмотр истории

git log                                   # история коммитов
git log --oneline                         # одна строка на коммит
git log --graph --all --decorate          # красивая визуализация ветвей
git log -p                                # показать diff для каждого коммита
git log --author="Ivan"                   # фильтр по автору
git log --since="2 weeks ago"             # фильтр по дате
git show <hash>                           # показать конкретный коммит

3. Работа с ветками (Branching)

Создание и переключение

git branch                                # список локальных веток
git branch -a                             # все ветки (локальные + remote)
git branch feature/user-auth              # создать новую ветку
git checkout feature/user-auth            # переключиться на ветку
git checkout -b feature/user-auth         # создать и переключиться

# Современный способ (Git 2.23+)
git switch feature/user-auth              # переключиться
git switch -c feature/user-auth           # создать и переключиться

Удаление ветки

git branch -d feature/completed           # удалить локальную ветку
git branch -D feature/incomplete          # принудительно удалить
git push origin --delete feature/removed  # удалить remote ветку

Переименование ветки

git branch -m old-name new-name          # переименовать
git push origin -u new-name               # отправить новое имя
git push origin --delete old-name         # удалить старое имя в remote

4. Pull и Push (синхронизация с remote)

Fetch (получить, но не merge)

git fetch                                 # получить все изменения с remote
git fetch origin                          # получить с конкретного remote
git fetch origin develop                  # получить конкретную ветку

Pull (fetch + merge)

git pull                                  # получить и слить с текущей веткой
git pull --rebase                         # вместо merge использовать rebase
git pull origin feature/new-feature       # pull конкретную ветку

Push (отправить свои коммиты)

git push                                  # отправить текущую ветку
git push origin feature/auth              # отправить specific branch
git push -u origin feature/auth           # отправить и set upstream
git push origin develop                   # отправить develop
git push --all                            # отправить все ветки
git push --force                          # переписать history (ОПАСНО!)
git push --force-with-lease               # более безопасный force push

5. Слияние (Merging)

Базовое слияние

git merge feature/user-auth               # слить feature в текущую ветку
git merge --no-ff feature/auth            # создать merge commit (сохранит историю)
git merge --squash feature/auth           # сжать все коммиты в один

Разрешение конфликтов

# При конфликте:
# 1. Вручную отредактировать файлы
# 2. Пометить как resolved
git add .                                 # пометить решённые
git commit                                # завершить merge

# Отменить слияние
git merge --abort                         # отменить в процессе слияния

Rebase (переиспользование базы)

git rebase main                           # переиспользовать main как базу
git rebase -i HEAD~3                      # интерактивный rebase последних 3 коммитов
# i = interactive
# можно выбрать: pick, squash, reword, drop и т.д.

6. Отмена изменений

Отмена локальных изменений

git checkout -- src/User.java             # отменить изменения в файле
git reset HEAD src/User.java              # unstage файл
git reset --hard HEAD~1                   # отменить последний коммит и изменения (ОПАСНО!)
git reset --soft HEAD~1                   # отменить коммит, но сохранить изменения
git clean -fd                             # удалить неиспользуемые файлы и директории

Revert (создать новый коммит, отменяющий старый)

git revert <hash>                         # создать коммит, отменяющий другой
git revert HEAD                           # отменить последний коммит

7. Стёш (временное сохранение)

Сохранение незаконченной работы

git stash                                 # сохранить изменения
git stash save "работаю над авто"        # с описанием
git stash list                            # список сохранений
git stash pop                             # вернуть последнее сохранение
git stash apply stash@{2}                 # вернуть конкретное сохранение
git stash drop stash@{0}                  # удалить сохранение

8. Тегирование

Создание тегов для releases

git tag v1.0.0                           # создать простой тег
git tag -a v1.0.0 -m "Release 1.0.0"    # annotated тег (рекомендуется)
git tag -l                                # список тегов
git show v1.0.0                          # показать информацию о теге
git push origin v1.0.0                   # отправить тег
git push origin --tags                   # отправить все теги

9. Синхронизация fork и upstream

Работа с fork репозитория

# Один раз: добавить upstream
git remote add upstream https://github.com/original/repo.git

# Синхронизировать fork с upstream
git fetch upstream
git checkout main
git merge upstream/main
git push origin main

10. Поиск и отладка

Поиск проблемного коммита

git bisect start                          # начать binary search
git bisect bad                            # текущий коммит плохой
git bisect good <old-hash>                # этот коммит был хороший
# Git автоматически ищет проблемный коммит

Поиск коммита по содержимому

git log -S "specificString"               # найти коммиты, изменившие эту строку
git log -p -- src/User.java               # история изменений конкретного файла
git blame src/User.java                   # кто последний изменял каждую строку

Поиск в коммитах

git grep "TODO"                           # искать во всех файлах
git grep "password" HEAD                  # искать в конкретной версии

11. Upstream tracking

Настройка отслеживания

git push -u origin feature/auth           # создать upstream для текущей ветки
git branch -u origin/develop              # изменить upstream существующей ветки
git branch -vv                            # показать tracked branches

12. Конфигурация

Локальная конфигурация

git config --global user.name "Ivan"     # установить имя
git config --global user.email "ivan@example.com"
git config --list                        # показать все параметры
git config core.editor vim               # изменить редактор

Практический workflow

Типичный день работы:

# Утро: обновить локальный код
git fetch origin                          # получить последние изменения
git status                                # проверить статус

# Начать новую фичу
git checkout -b feature/user-profile

# Работа (несколько раз в день)
code src/User.java                        # редактируем код
git add src/User.java                    # добавляем изменения
git commit -m "feat: add user profile endpoint"

# Перед push: синхронизировать с main
git fetch origin
git rebase origin/main                    # переиспользовать main как базу

# Отправить
git push -u origin feature/user-profile

# Создать Pull Request в GitHub/GitLab
# После review и approve:
git checkout main
git pull
git branch -d feature/user-profile
git push origin --delete feature/user-profile

Команды, которые я НЕ использую

❌ git push --force          # слишком опасно, используй --force-with-lease
❌ git reset --hard          # теряет все изменения, используй с осторожностью
❌ git pull (без понимания)  # может создать ненужные merge commits
❌ git rebase main (при конфликтах в shared branch)  # усложняет историю

Best practices, которые я применяю

✅ Atomic commits           # один коммит = одна логическая единица
git add -p                  # выбрать части для коммита

✅ Descriptive messages     # "feat:" / "fix:" / "refactor:"
git commit -m "fix: resolve null pointer in PaymentService"

✅ Sync перед push          # fetch + rebase = clean history
git fetch
git rebase origin/main

✅ Review свой код перед push
git diff                    # просмотреть изменения
git diff --cached          # просмотреть staged изменения

✅ Использовать --force-with-lease вместо --force
git push --force-with-lease  # безопаснее для команды

Команды для спасения

# Случайно удалили коммит?
git reflog                  # история всех операций
git reset --hard <hash>    # вернуться к коммиту

# Нужно отменить push?
# К сожалению, невозможно отменить push (в shared repo)
# Но можно создать revert коммит:
git revert <hash>
git push

# Нужно отменить merge?
git merge --abort          # во время merge
git reset --hard ORIG_HEAD # после merge

Вывод

Основные команды, которые нужно знать:

  1. Ежедневные: status, add, commit, push, pull
  2. Ветки: branch, checkout/switch, merge
  3. История: log, diff, show, blame
  4. Синхронизация: fetch, push, pull
  5. Отмена: reset, revert, stash
  6. Исправление: rebase, cherry-pick, bisect

Главное правило: Всегда проверяй git status и git diff перед коммитом. 95% проблем с Git происходят из-за поспешности разработчика, а не из-за ошибок Git.

Какими командами git пользовался | PrepBro