Upstream

Коротко

Источник, относительно которого получают изменения: исходный проект при работе через форк или удалённая ветка, с которой связана локальная.

Что такое «Upstream»

Слово переводится как «вверх по течению»: изменения текут от источника к копиям. Обратное направление называют downstream. В Git термин используется в двух смыслах, и оба встречаются каждый день.

Первый смысл — удалённый репозиторий исходного проекта. Когда вы работаете через форк, ваша копия подключена как origin, а оригинал добавляют под именем upstream, чтобы забирать оттуда обновления. Второй смысл — отслеживаемая ветка: у локальной ветки можно указать удалённую пару, и тогда git push и git pull без параметров знают, куда отправлять и откуда брать.

Отслеживаемая ветка на практике

git branch --set-upstream-to=origin/main   # связать текущую ветку
git push -u origin feature/catalog          # связать при первой отправке
git status          # покажет, насколько ветка впереди или позади
git log @{u}..      # мои коммиты, которых нет на сервере
git log ..@{u}      # чужие коммиты, которые я ещё не встроил

На вопрос о статусе Git ответит, например: Your branch is ahead of 'origin/main' by 2 commits. Запись @{u} — сокращение для upstream текущей ветки. Сравнение «впереди на N, позади на M» Git считает по последнему загруженному состоянию, поэтому перед проверкой стоит выполнить git fetch. В новых версиях Git можно включить настройку push.autoSetupRemote, и связь будет создаваться автоматически при первой отправке.

«Отправить в апстрим»

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

Типичная путаница

  • Ожидать, что git pull сам заберёт изменения из исходного проекта в форк. Он работает с upstream ветки, а это обычно ваш origin; оригинал нужно загружать явно: git fetch upstream.
  • Создать ветку локально и удивляться ошибке при git push без параметров: у новой ветки ещё нет связанной удалённой.

Обновлено:

Все термины раздела «Git»

Что будем искать? Например,Продвижение