ОК, во-первых, некоторые термины:
А (регулярный, обычный, локальный) филиал нечто вроде master
.
А «удаленный филиал» как origin/master
является то, что хранится в вашем местном хранилище, чтобы вспомнить, где, на пульте дистанционного управления, пульт дистанционного управления имеет свой собственный (локальный) филиал наведение.
«Удаленная ветка» обновляется при контакте с пультом дистанционного управления (обычно при извлечении и нажатии). В то время ваш локальный git узнает, какие у них есть ветви, и обновляет их.
«Отслеживание» - это локальная ветка, которая записывает два элемента: «удаленный», обычно это имя, как origin
, и другое «имя слияния». Например, если ваше местное отделение master
является ветвью отслеживания, оно может быть сконфигурировано с branch.master.remote = origin
и branch.master.merge = master
. Досадно, вы можете не всегда просто строка их вместе (вы должны карту через remote.origin.fetch
быть совершенно правильно с этим), но в целом это означает, что ваш местный master
будет «отслеживать» origin/master
».
Вы можете 't создайте локальную удаленную ветку. У вас есть fetch
или push
на/из пульта. Если этот пульт имеет локальную ветвь с именем X
, ваш git затем записывает идею пульта этой ветки, используя стиль origin/X
Итак, что здесь происходит? Ну, вы сделали это:
$ git checkout -b m1-master m1/master
Это создает локальную ветку с именем m1-master
. (. Это местное отделение также отслеживание отрасль, но это лишь отчасти Уместно, из-за push.default
настройки ниже)
Тогда вы сделали это:
$ git push
(без какого-либо удаленного имени и не refspecs после push
).Git использует пульт дистанционного управления по умолчанию, который, как оказалось, является m1
из-за отслеживания. Далее, хотя git использует refspec по умолчанию, на основе push.default
и/или других git config
элементов.
Начиная с git 1.8.4.2 "по умолчанию push.default
" - matching
. Это не создало бы новую ветку (но также ничего не будет нажимать, если там нет m1-master
). У вас установлено значение current
, что означает: «пожалуйста, обновите или создайте на пульте, текущую ветку, используя ее текущее имя». Текущая ветка - m1-master
, так что она была создана.
Изменить push.default
для upstream
, чтобы исправить это:
git config push.default upstream
(. Кроме того, см "Warning: push.default is unset; its implicit value is changing in Git 2.0" для различных других вариантов)
Ну, вы можете сделать это с git update-ref
или ручной в вашем .git
каталоге. :-) Просто, не с «нормальными» пользовательскими командами.
Я не знаю, почему вы сказали:« Это локальное отделение также является ветвью отслеживания, но это не имеет значения здесь ». Это актуально и именно поэтому я использовал команду. Эта ветка отслеживает 'm1/master'. Это то, что я хочу. Что смущает меня, это создало ветвь на удаленном удаленном сервере 'm1', но она не нажала на отслеживаемую ветку, вместо этого она создала новую ветвь на' m1' с тем же именем, что и локальная ветвь. 'm1-master' не был создан в' origin', а в 'm1' – Nithin
Не имеет значения, когда' push.default' установлен в 'current'! (I.e., push не будет смотреть на то, что он отслеживает.) – torek
Хорошо ... Вы хотели сказать, что это не имеет значения для 'push' с текущей настройкой. Было важно тянуть, что я хотел сказать. – Nithin