Что является результатом `git push origin`?

Я работал над своей локальной ветвью функций, foo. Затем я хотел подтолкнуть эту новую ветку к происхождению, чтобы другие могли работать над ней. Обычный способ сделать это:

git push origin foo:foo

Что я в итоге сделал, и он работал полностью, как ожидалось, подталкивая 61 объект. Прежде чем это сделать, по прихоти, я попробовал:

git push origin

Подумайте, может быть, по умолчанию будет создана новая удаленная ветвь, основанная на имени моей локальной ветки. Выходной сигнал был нормальным токовым выходом, только 13 предметов были сдвинуты вверх. Результаты были необъяснимыми. Ничего нового не появилось для других разработчиков или в моем местном репо после получения.

Итак, что думает git, что я говорю ему делать, когда я делаю git push origin, и какой эффект, если он есть, был у моего удаленного репо?

Ответ 1

Это зависит от вашей версии git. В старой версии он попытался бы протолкнуть каждую локальную ветвь, которая также присутствует на далекой стороне. Начиная с версии 1.6.3, поведение управляется параметром конфигурации push.default.

Значения:

  • matching: [ по умолчанию] нажмите все ветки с тем же локальным и удаленным именем
  • nothing: нажмите ничего
  • tracking: будет только толкать текущую ветку, если она отслеживает удаленную ветвь
  • current: нажатие текущей ветки

Ответ 2

Июнь 2012: [ANNOUNCE] Git 1.7.11.rc1

Новый режим для push, "simple" , который представляет собой крест между "current" и "upstream" , был представил.
"git push" без какого-либо refspec будет нажимать текущую ветку на одно и то же имя в удаленном репозитории только тогда, когда она настроена на отслеживание ветки с тем же именем там.
План должен сделать этот режим новым значением по умолчанию, когда push.default не настроен.


Март 2012: Остерегайтесь: политика по умолчанию "сопоставление" может скоро измениться
(через некоторое время после Git1.7.10 +)
:

См. " Пожалуйста, обсудите: что" git push "должен делать, когда вы не говорите, что нажать?"

В текущей настройке (т.е. push.default=matching) git push без аргумента будет удалять все ветки, которые существуют локально и удаленно с тем же именем.
Обычно это подходит, когда разработчик подталкивает свой собственный публичный репозиторий, но может быть запутан, если не опасен при использовании общего хранилища.

Предложение изменить значение по умолчанию на "upstream" , т.е. нажимать только текущую ветку и нажимать ее на ветвь Git pull pull from.
Другой кандидат: current '; это подталкивает только текущую ветку к удаленной ветки с тем же именем.

То, что обсуждалось до сих пор, можно увидеть в этом потоке:

http://thread.gmane.org/gmane.comp.version-control.git/192547/focus=192694

Предыдущие соответствующие обсуждения включают:

Чтобы присоединиться к обсуждению, отправьте свои сообщения по адресу: git @vger.kernel.org