Работа с удалёнными репозиториями на GitHub, GitLab и Bitbucket в целом строится по одним и тем же принципам (Git), но есть нюансы в интерфейсах и некоторых функциях. Ниже — универсальные команды и специфика каждой платформы.
Базовые команды для работы с удалённым репозиторием
Клонирование проекта
git clone <URL-репозитория>
URL берут на странице репозитория (кнопка Code на GitHub/GitLab, Clone на Bitbucket). Можно использовать HTTPS или SSH.
SSH удобнее для регулярной работы: не нужно каждый раз вводить пароль, а для команды настраивают SSH‑ключ.
Проверка подключённых удалённых репозиториев
git remote -v
Обычно используется имя origin для основного удалённого репозитория.
Отправка изменений (push)
git push -u origin <имя-ветки>
Флаг -u один раз связывает локальную ветку с удалённой, чтобы потом можно было писать просто git push.
Получение изменений (pull)
git pull origin <имя-ветки>
Это эквивалентно git fetch + git merge. Если нужна более чистая история, вместо pull используют git rebase.
Fetch без слияния
git fetch origin
Получает данные об удалённых ветках и коммитах, но не меняет рабочую директорию. Полезно, чтобы посмотреть, что есть на сервере, прежде чем делать merge или rebase.
Типичный рабочий процесс
- Клонируем проект:
git clone .... - Создаём ветку для задачи:
git checkout -b feature/new-login. - Вносим изменения, делаем коммиты:
git add .,git commit -m "...". - Отправляем ветку на сервер:
git push -u origin feature/new-login. - Создаём запрос на слияние (Pull/Merge Request) в интерфейсе платформы.
- Проходим ревью, при необходимости вносим правки и делаем новые коммиты — они автоматически попадают в тот же PR/MR.
- После одобрения сливаем ветку в основную (обычно это делает ревьюер или CI/CD).
- Удаляем удалённую ветку:
git push origin --delete feature/new-login(локальную можно удалить черезgit branch -d feature/new-login).
Особенности GitHub, GitLab, Bitbucket
| Платформа | Характерные особенности |
|---|---|
| GitHub | Самый популярный хостинг. Акцент на Pull Requests, Actions (CI/CD), шаблоны репозиториев, GitHub Discussions, Codespaces (облачная среда разработки). Часто используют GitHub Flow (короткие feature‑ветки → PR → merge в main). |
| GitLab | Сильная интеграция CI/CD (GitLab CI) «из коробки», продвинутые правила защиты веток, environments, deploy tokens, удобные инструменты для DevOps. Есть GitLab Flow и Trunk Based Development. |
| Bitbucket | Тесная интеграция с Jira и другими продуктами Atlassian. Хорошо подходит для корпоративных команд, где уже используют экосистему Atlassian. Поддерживает как Git, так и Mercurial (хотя Git сейчас основной). |
Несмотря на различия, базовые команды Git везде одинаковые. Различаются именно веб‑интерфейсы, настройки прав и дополнительные сервисы.
Важные практики и нюансы
- Защита основной ветки. На всех платформах можно настроить правила: нельзя делать
pushнапрямую вmain/master, обязательны Pull/Merge Requests, проверки CI, минимум N ревьюеров и т.п. - Squash и rebase. При слиянии можно выбрать, как сохранить историю: обычный merge (сохраняет все коммиты), squash (все коммиты ветки превращаются в один), rebase (перекладывает коммиты поверх актуальной истории).
- Force push. Команда
git push --forceперезаписывает историю на удалённом репозитории. Это опасно для общих веток: можно потерять чужие коммиты. Используйте только для своих временных веток, если точно знаете, что делаете. - Работа с несколькими удалёнными. Иногда добавляют второй remote (например,
upstreamдля форка):git remote add upstream <URL-оригинального-репозитория> git fetch upstream git merge upstream/mainЭто нужно, когда вы работаете с форком чужого проекта и хотите подтягивать изменения из оригинала.
Пример: работа с форком на GitHub
- На GitHub нажимаете Fork — создаётся ваша копия репозитория.
- Клонируете её:
git clone <ваш-URL>. - Добавляете оригинал как
upstream:git remote add upstream <URL-оригинала> - Регулярно обновляете свою копию:
git fetch upstream git checkout main git merge upstream/main - Для новой задачи создаёте ветку, коммитите,
git push -u origin <ветка>, затем создаёте Pull Request в оригинальном репозитории.
Частые проблемы и решения
- «Updates were rejected because the tip of your branch is behind» — на сервере появились новые коммиты, которых нет у вас. Сделайте
git pullилиgit rebase, разрешите конфликты, затемpush. - «src refspec … does not match any» — проверьте имя ветки и убедитесь, что она существует локально.
- Конфликты слияния. Откройте файлы, найдите маркеры конфликта (
<<<<<<<,=======,>>>>>>>), оставьте нужный код, удалите маркеры, сделайтеgit add, затем завершите слияние коммитом.