Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save JohnyDeath/ef8e62124f817ce16979e5a1ef7e635a to your computer and use it in GitHub Desktop.
Save JohnyDeath/ef8e62124f817ce16979e5a1ef7e635a to your computer and use it in GitHub Desktop.
@ImHunter скорее всего у тебя у тебя в локальном репе связь установлена только с твоим форком. Убедиться в этом можно, выполнив команду git remote -v. В выводе будет две строки, начинающиеся с origin (вероятнее всего) и ведущие в твой форк.
Для начала надо добавить основной репозиторий (upstream) в список отслеживаемых удаленных репозиториев. Делается это командной git remote add upstream адрес-репы-на-гитхабе. После этого git remote -v должен выдать уже четыре строки, две для ориджина, две для апстрима.
Идем дальше. Нам необходимо "извлечь" информацию о состоянии веток в апстриме. Для этого служит команда git fetch upstream. Графические клиенты гита обычно этот шаг делают автоматически раз в н секунд.
Дальше мы переходим собственно к получению изменений. Тут есть два пути.
Путь первый - находясь в ветке девелоп выполнить команду git merge upstream/develop. Эта команда создаст мерж коммит - слияние веток, который надо потом запушить к себе в репу на гитхабе. Однако в этом случае, когда ты будешь делать новый пулл-реквест в апстрим, в истории изменений будут светиться эти мерж-коммиты, и без отдельных действий от принимающих пулл-реквест слить его с получением чистой истории уже не получится. Для упрощения этого есть путь два.
Вместо мержа можно выполнить жёсткий сброс состояния ветки с помощью команды git reset --hard upstream develop. Внимание! Это полностью откатит все локальные изменения на состояние коммита из апстрима. После этого можно начинать разработку. Если какие-то изменения уже есть, то вместо --hard можно указать --soft, тогда локальные изменения файлов сохранятся, но дерево коммитов сравнится с апстримом.
Если же в локальной истории есть уже несколько коммитов, которые не хочется терять, то можно воспользоваться путем 3. Его суть - использование механизма перемещения изменений. С помощью команды git rebase upstream/develop можно переместить коммиты из своей ветки над коммитами из ветки апстрима. Но надо аккуратно следить за тем, что получается в итоге.
Есть ещё четвёртый путь - cherry-pick, но я оставлю его в качестве домашнего задания и пары поломанных репозиториев. Ведь как известно, лучший способ понять гит - сломать и восстановить пять своих репозиториев. А потом ещё парочку.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment