kb/remote
Origin, upstream, remote add. Разница между fetch и pull, почему `git push --force-with-lease` безопаснее `--force`. Tracking branches, SSH-ключи, GPG-подпись коммитов и тегов.
`git push --force` затирает удалённую историю своей. `git push --force-with-lease` делает то же, но отказывает, если кто-то успел запушить туда после твоего последнего fetch. Используй всегда `--force-with-lease`.
Создаёт локальную копию удалённого репозитория. Под капотом - `init` + добавление origin + `fetch` всей истории + `checkout` основной ветки. Самая первая команда при работе с чужим проектом.
Скачивает обновления с remote, но **не трогает** локальные ветки. Обновляет только refs/remotes/origin/. Безопасная команда: после fetch ты видишь, что пришло, и решаешь, что с этим делать.
Затаскивает обновления с удалённого репозитория и сразу сливает с текущей веткой. По сути - `git fetch` + `git merge` (или + `git rebase` с `--rebase`). Самая запутанная команда для новичков.
Отправляет локальные коммиты в удалённый репозиторий и обновляет там ветку. Если remote получил коммиты от кого-то другого после твоего последнего pull - push откажется, пока не синхронизируешься.
Управляет списком URL-ов, с которыми связан репозиторий. По умолчанию после `clone` один remote по имени `origin`. Можно добавить второй (`upstream` для fork-flow), удалить, переименовать.
Связь между локальной веткой и удалённой: «эта моя ветка следит за этой удалённой». Включает поведение `git pull`/`push` без аргументов и `git status` сообщения вида «ahead 3, behind 2».
Два общепринятых имени remote. `origin` - куда клонировал (обычно свой fork). `upstream` - «настоящий» проект, у которого ты сделал fork. Это просто конвенция: ничего магического, оба имени можно переименовать.