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

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

git push origin foo:foo

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

git push origin

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

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

2 ответа

Решение

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

Значения:

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

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

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


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

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

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

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

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

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

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

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

Другие вопросы по тегам