Поведение «git push» по умолчанию без указания ветки - PullRequest
1302 голосов
/ 04 июня 2009

Я использую следующую команду для отправки в мою удаленную ветку:

git push origin sandbox

Если я скажу

git push origin

это также приводит к изменениям в других моих ветках или только в моей текущей ветке? У меня три ветви: master, production и sandbox.

Документация git push не очень ясна по этому поводу, поэтому я хотел бы уточнить это навсегда.

Какие филиалы и пульты точно обновляют следующие команды git push?

git push 
git push origin

origin выше - это пульт.

Я понимаю, что git push [remote] [branch] будет выдвигать только эту ветку к удаленному.

Ответы [ 12 ]

1525 голосов
/ 04 июня 2009

Вы можете управлять поведением по умолчанию, установив push.default в вашем git config. Из документации git-config (1) :

push.default

Определяет действие, которое должен выполнить git push, если в командной строке не задан refspec, в удаленном не настроен refspec и ни один из параметров, заданных в командной строке, не указывает refspec. Возможные значения:

  • nothing: ничего не нажимать

  • matching: нажать все соответствующие ветви

    Все ветви, имеющие одинаковые имена на обоих концах, считаются совпадающими.

    Раньше это было по умолчанию, но не с Git 2.0 (simple - новое по умолчанию).

  • upstream: перенести текущую ветвь в ее восходящую ветвь (tracking является устаревшим синонимом восходящей ветки)

  • current: переместить текущую ветвь в одноименную ветвь

  • simple: (новое в Git 1.7.11) подобно восходящему каналу, но отказывается нажимать, если имя вышестоящей ветви отличается от локального

    Это самый безопасный вариант и хорошо подходит для начинающих.

    Этот режим стал режимом по умолчанию в Git 2.0.

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

Примеры командной строки:

Для просмотра текущей конфигурации:

git config --global push.default

Чтобы установить новую конфигурацию:

git config --global push.default current
199 голосов
/ 06 октября 2011

Вы можете настроить поведение по умолчанию для вашего git с помощью push.default

git config push.default current

или если у вас много репозиториев и вы хотите одинаковое для всех, тогда

git config --global push.default current

current в этой настройке означает, что по умолчанию вы будете толкать только текущую ветвь только тогда, когда вы git push

Другие опции:

  • ничего: не толкай ничего
  • совпадение: нажать все соответствующие ветки (по умолчанию)
  • отслеживание: нажмите текущую ветку на то, что она отслеживает
  • current: Нажмите текущую ветвь

ОБНОВЛЕНИЕ - НОВЫЙ СПОСОБ ЭТОГО

Начиная с Git 1.7.11, сделать следующее:

git config --global push.default simple

Это новая введенная настройка, которая работает так же, как и текущая, и будет по умолчанию настроена на git из v 2.0 в соответствии со слухами

197 голосов
/ 04 июня 2009

git push origin будет выдвигать все изменения в локальных ветвях, которые имеют соответствующие удаленные ветки, в origin Что касается git push

Работает аналогично git push <remote>, где <remote> - это удаленный узел текущей ветви (или источник, если для текущей ветви не настроен ни один удаленный узел).

Из раздела «Примеры» справочной страницы git-push

54 голосов
/ 06 ноября 2011

Я просто зафиксировал свой код в ветке и отправил его в github, например:

git branch SimonLowMemoryExperiments
git checkout SimonLowMemoryExperiments
git add .
git commit -a -m "Lots of experimentation with identifying the memory problems"
git push origin SimonLowMemoryExperiments
24 голосов
/ 09 августа 2012

Вот очень полезная и полезная информация о Git Push : Git Push: только верхушка

Наиболее распространенное использование git push - это отправка локальных изменений в ваш общедоступный репозиторий. Предполагая, что восходящий поток является удаленным с именем «origin» (удаленное имя по умолчанию, если ваш репозиторий является клоном), а ветвь, которую нужно обновить в / из, называется «master» (имя ветви по умолчанию), это делается с помощью: git push origin master

git push origin перенесет изменения из всех локальных ветвей в соответствующие ветви исходного источника.

git push origin master перенесет изменения из локальной ветки master в удаленную ветку master.

git push origin master:staging перенесет изменения из локальной основной ветки в удаленную промежуточную ветвь, если она существует.

19 голосов
/ 17 марта 2012

(март 2012)
Осторожно: политика по умолчанию "matching" может скоро измениться
(иногда после 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

18 голосов
/ 15 марта 2010

Я просто поместил это в мой псевдоним .gitconfig и люблю, как это работает:

pub = "!f() { git push -u ${1:-origin} `git symbolic-ref HEAD`; }; f"

Переместит текущую ветку в исходное положение с git pub или с другим репо с git pub repo-name. Вкусно.

9 голосов
/ 23 июня 2015

Вы можете нажать текущую ветку с помощью команды

git push origin HEAD

(взято из здесь )

8 голосов
/ 04 июня 2009

Git push попытается отправить все локальные ветви на удаленный сервер, это, скорее всего, то, что вы не хотите. У меня есть пара удобных настроек, чтобы справиться с этим:

Псевдонимы "gpull" и "gpush" соответственно:

В моем ~ / .bash_profile

get_git_branch() {
  echo `git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'`
}
alias gpull='git pull origin `get_git_branch`'
alias gpush='git push origin `get_git_branch`'

Таким образом, выполнение «gpush» или «gpull» будет толкать только мою «текущую» ветку.

7 голосов
/ 24 октября 2015

Вы можете изменить это поведение по умолчанию в вашем .gitconfig, например:

[push]
  default = current

Чтобы проверить текущие настройки, запустите:

git config --global --get push.default
...