Во-первых, стоит объяснить, что происходит, когда вы делаете:
git push company stage
Последний параметр - это действительно refspec , который определяет сопоставление между исходной ссылкой и пунктом назначения.ref - в простых случаях, с которыми вы, вероятно, имеете дело, эти "refs" - это имена ветвей.Если в refspec нет :
, то предполагается, что вы хотите нажать на ветку с тем же именем.Итак, команда, которую вы запускаете, эквивалентна:
git push company stage:stage
Если вместо этого вы хотите обновить ветку master
в репозитории company
, то вам нужно выполнить:
git push company stage:master
Продолжаем, когда вы удалили свою ветку и воссоздали ее с помощью:
git branch stage company/master
..., которая создает записи в вашей конфигурации git, которые связывают вашу локальную ветку stage
светка master
в хранилище company
.¹ Это означает, что если вы находитесь в ветке stage
, то выполнение git pull
должно работать правильно, что в этом случае должно было бы обновить ветку удаленного отслеживания company/master
и объединить ее с stage
.
К сожалению (и сбивает с толку) эти параметры конфигурации (по умолчанию) не влияют на поведение git push
, о котором я писал более подробно в другом месте .Вы не упоминаете форму команды git push
, которую вы тогда использовали, но вы должны были выполнить:
git push company stage:master
... если вы хотите обновить ветку master
в company
хранилище с вашей локальной stage
веткой.(Если вы просто попробуете git push company
, это попытается протолкнуть каждую «совпадающую» ветвь между вашим локальным репозиторием и company
, где «совпадение» означает «ветвь с тем же именем существует локально и удаленно». Вы можете изменить этоповедение, установив параметр конфигурации push.default
на tracking
.)
¹ В более ранних версиях git вам пришлось бы добавить параметр --track
, но какое-то время это былопо умолчанию, где начальной точкой является ветвь удаленного отслеживания.