2011-01-03 3 views
8

Я работал над своей локальной ветвью, foo. Затем я хотел подтолкнуть эту новую ветку к происхождению, чтобы другие могли работать над ней. Обычный способ сделать это:Каков результат `git push origin`?

git push origin foo:foo 

Который я в конце концов сделал, и он работал полностью, как ожидалось, подталкивая 61 объект. Перед тем как делать это, по наитию, я попробовал:

git push origin 

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

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

+3

'мерзавец помощь push' должен предоставить вам всю информацию, которую вы хотите знать. Есть раздел о том, что делает 'git push origin', и какие параметры конфигурации влияют на то, что он делает. http://www.kernel.org/pub/software/scm/git/docs/git-push.html –

ответ

11

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

Значения:

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

И я добавлю к этому: 'matching' является стандартным по умолчанию –

+0

Обновлен ответ с этим для удобства чтения для других –

3

июня 2012: [ANNOUNCE] Git 1.7.11.rc1

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


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

Смотрите "Please discuss: what "git push" should do when you do not say what to push?"

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

Предложение заключается в изменении по умолчанию для «upstream», т.е. нажать только текущую ветвь, и подтолкнуть ее к ветке мерзавца тянуть будет тянуть с.
Другой претендент: 'current'; это подталкивает только текущую ветку к удаленной ветке с тем же именем.

Что обсуждалось до сих пор можно увидеть в этой теме:

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

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

Чтобы присоединиться к обсуждению, присылайте сообщения: [email protected]

Смежные вопросы