Ответ 1
Вы должны иметь в виду, что существуют разные типы веток:
- (Чисто) локальные ветки, т.е. филиалы, которые вы делаете,
- Филиалы, которые живут в удаленном хранилище, из-за отсутствия лучшего термина. Возможно, вы знаете удаленный репозиторий под удаленным именем, например
origin
. С этой точки зрения, однако, такая ветвь является локальной. Добро пожаловать в распределенный контроль версий!:)
- Удаленное отслеживание веток. Также просто называется удаленными ветками, как в Pro Git book, но я нахожу эту фразу запутанной; удаленное отслеживание веток более точное. Это специальные локальные ветки, единственной целью которых является отображение состояния веток, которые находятся в удаленном хранилище во время вашего последнего взаимодействия с сервером. В частности, вы не можете фиксировать ветки этого типа.
Здесь branch_name
является локальной ветвью, тогда как origin/branch_name
является ветвью удаленного отслеживания; он отражает состояние соответствующей ветки, которая живет в origin
.
Сразу после запуска
git fetch
ветвь удаленного отслеживания origin/master
и соответствующая ветвь, которая находится в origin
, должны быть идеально синхронизированы (конечно, по модулю одновременных проталкиваний на удаленный сервер). Тогда не должно быть сюрпризом, что
git push origin origin/branch_name
ничего не выдвигает: вы, по сути, пытаетесь выдвинуть вещи, которые уже присутствуют в предке соответствующей ветки, которая живет в origin
.
Однако, если ваша локальная ветвь, branch_name
, опережает одну или несколько фиксаций,
затем работает
git push origin branch_name
будет выдавать коммиты, содержащиеся в branch_name
, но не в ветке, которая находится в origin
: