2016-03-28 2 views
2

после нескольких недель использования git как машины, теперь я нахожусь на пути, чтобы выяснить, как работает GIT. Чем я начал с простой вещи:Разница между git push origin development и git push origin HEAD: разработка

git checkout -b test origin/development` //Creating new local branch from development 

Create new text file called test.txt 

git add . //Set files that will be committed 
git commit -m "this is a test" // Committing 

А потом приходит мое сомнение:

Когда я пытаюсь нажать делать:

git push origin development 

Журнал говорит: Все, что до настоящего времени

Если я попытаюсь нажать:

git push origin HEAD:development 

Он работает так, как должен.

Выполнение моего исследования Я обнаружил, что HEAD означает имя текущей ветви. Итак, если это правильно, для меня это не имеет никакого смысла.

В чем разница между

git push origin development 

и

git push origin HEAD:development 
+0

Возможный дубликат [git push origin head?] (Http://stackoverflow.com/questions/11731414/git-push-origin-head) – Basilevs

+0

Это не, @Basilevs. Он задает разницу между нажатием на исходный мастер и начальную головку. Я прошу разницу между начальником и начальником HEAD: master. –

ответ

1
git push remote-name some-name 

попытки нажать любую местного ветвь с именем some-name для удаленного филиала также имени some-name решен в remote-name/some-name. Под капотом он ищет имена ветвей под refs в каждом локальном (локальном, удаленном) месте.

Поскольку ваша местная копия development не была изменена, вы получите сообщение о том, что оно актуально, ничего не нужно нажать.

Альтернативная версия

git push remote-name HEAD:development 

пропускает часть о поиске соответствующих имен филиалов в локальных и удаленных refs, потому что вы дали ему явную ветвь через HEAD.

Он по-прежнему использует удаленный refs для определения удаленной ветви development. Но затем он использует HEAD текущей ветки (ваша новая ветка test) для совершения токов.

Если вы хотите просто сделать git push из test ветви и правильно толкать от test к remote/development, вы можете настроить поведение по умолчанию push к «вверх» установкам (обратите внимание, что термин «отслеживание» является старым термином для " вверх по течению ", что является предпочтительным).

ли

git config --global push.default upstream 

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

Без установки, до мерзавец версии 2.0, режим по умолчанию для простых git push результатов в попытке подтолкнуть все локальные ветки на вышестоящие ветви с соответствующими именами на своих настроенных пультов ДУ. Для git 2.0 и новее значение по умолчанию - simple, которое действует как upstream, за исключением того, что он также не может нажать, если текущая ветка не имеет то же имя, что и его настроенный пульт.

Установка «вверх по течению» является хорошей, поскольку (а) она позволяет легко нажимать ветви независимо от того, соответствуют ли их имена их восходящим названиям; (b) для версий до 2.0 он ограничивает незакрытый вызов git push, влияя только на текущую ветку, поэтому, если вы активно развиваетесь на нескольких ветвях, git push больше не будет непреднамеренно толковать другие работы, не связанные с текущей работой отрасли; (c) вам не понадобится форма git push, которая конкретно называет удаленный и ветви, если вы не пытаетесь нажать на какую-то ветвь, которая не настроена вверх по течению для вашей текущей ветви, - и я бы сказал, что это делает больше всего смысл: вам нужно только подробно рассказать о ветвях, если вы не отталкиваетесь от локальной ветви до ее естественной настроенной целевой цели. Даже настройка 2.0 simple не удовлетворяет этому.

remote-name часто бывает origin, но может быть любым настроенным удаленным, добавленным через различные команды git или непосредственно, как в файле .gitconfig.

+0

Git изменил настройку по умолчанию для push с версией 2.0 a назад, вы описываете 1.9 и старше. –

+0

Обновлен для описания 'simple' по умолчанию в git 2.0. – ely

+0

Thx. Теперь это ясно для меня. :) –

0

git push origin development

будет пытаться подтолкнуть местное отделение развития. В этом типе команды git push git будет думать, что локальная ветка и удаленная ветка отслеживания имеют одну и ту же ветвь nanme.

Из страницы руководства по мерзавец нажать

git push origin master Find a ref that matches master in the source repository (most likely, it would find refs/heads/master), and update the same ref (e.g. refs/heads/master) in origin repository with it. If master did not exist remotely, it would be created.

+0

У меня есть функциональность GIT PUSH, мой вопрос в том, что разница между push to HEAD: BRANCH и push to BRANCH. –

+0

@RodrigoBorba Этот вопрос касается синтаксиса команды git, разница была определена в man-странице. – gzh

1

git push origin development толкает development филиал

git push origin HEAD:development толкает текущую ветвь пульта development

Скорее всего, вы не в локальной development отрасли. Рассмотрите это с помощью

git status 

команда.

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