git нажать на конкретную ветку

104

Даже после прочтения этого вопроса: git-push-current-branch мне все еще трудно понять, как мне написать команду git push. Как упоминалось в ссылке на вопрос, это не ясно из документации.

Я хотел бы использовать свой пример из «реального мира». Вот что я вижу, когда выполняю git statusкоманду на верхнем уровне своей ветки:

На ветке amd_qlp_tester

Ваша ветка опережает origin / amd_qlp_tester на 5 коммитов.

и т.д...

Итак, моя ветка называется, amd_qlp_testerно она была «ответвлена» от основной ветки (если у меня неправильные термины, это из-за моего фона SVN). Но есть еще имя `origin / amd_qlp_testser '

Итак, как мне сформулировать мою команду push?

Это одно из следующего:

git push origin/amd_qlp_tester
git push origin amd_qlp_tester
git push amd_qlp_tester
git push origin
git push
code_fodder
источник

Ответы:

94

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

Синтаксис push выглядит так - git push <remote> <branch>. Если вы посмотрите на свой пульт в .git/configфайле, вы увидите запись, в [remote "origin"]которой указан URL-адрес репозитория. Итак, в первой части команды вы укажете Git, где найти репозиторий для этого проекта, а затем просто укажите ветку.

Петр Менсик
источник
Спасибо за это :), можете ли вы объяснить, почему это два отдельных «слова», когда описание статуса dit отображает его как путь, т.е. почему это так, origin amd_qlp_testserа неorigin/amd_qlp_tester
code_fodder 03
По умолчанию «удаленный» основан на конфигурации текущей ветки (в данном случае это действительно так origin). Ветвь (ветки) для переноса значений по умолчанию (в текущих версиях git), :если они не установлены, что означает matching, что это должно измениться в будущем.
torek
Я немного сбит с толку, я использую v2.10, когда я печатаю, git pushон пытается подтолкнуть все отслеживаемые ветки, вопреки тому, что вы сказали («пульт от текущей ветки - значение по умолчанию»).
Роберто
Git 2.x должен использовать simpleстратегию push, что означает, что будет отправляться только текущая ветка. blogs.atlassian.com/2014/06/happened-git-2-0-full-goodies
Петр Менсик
fatal: Couldn't find remote ref branch-name-here
doug65536
115

Если ваша локальная ветка и удаленная ветка имеют одно и то же имя, вы можете просто сделать это:

git push origin branchName

Если имя вашей локальной и удаленной ветки отличается, вы можете просто сделать это:

git push origin localBranchName:remoteBranchName
Имранмадбар
источник
Это было очень полезно, трудно найти :)
Pe Dro
Да, вы правы, тоже сложно вспомнить!
Имранмадбар
8

Все ответы на вопросы, с которыми вы связались, касаются настройки git, чтобы вы могли ввести очень короткие git push команды и заставлять их делать все, что вы хотите. И это здорово, если вы знаете, что хотите и как это написать в Git-Ese, но вы новичок в git! :-)

В вашем случае ответ Петра Менсика (ну, «а»). Вот почему:

Команда ищет в вашем файле именованный «удаленный» (например, ). В файле конфигурации перечислены:git push remote.git/configorigin

  • где (по URL-адресу) этот удаленный "живет" (например, ssh://hostname/path )
  • Куда идут толчки, если разные
  • что будет вытолкнуто, если вы не сказали, какую ветвь (и) нажимать
  • что получается, когда ты бежишь git fetch remote

Когда вы впервые клонировали репозиторий - всякий раз, когда это было - git устанавливал значения по умолчанию для некоторых из них. URL является то , что вы клонировали из и остальные, если он установлен или снята с охраны, которые все «разумные» по умолчанию ... или, хм, это они?

Проблема в том, что люди со временем изменили свое мнение относительно того, что является «разумным». Итак, сейчас (в зависимости от вашей версии git и от того, настроили ли вы все подробно), git может выводить множество предупреждений об изменении значений по умолчанию в будущем. Добавление имени «ветки, которую нужно нажать» - amd_qlp_tester- (1) закрывает ее, а (2) подталкивает только эту одну ветку.

Если вы хотите нажимать более удобно, вы можете сделать это с помощью:

git push origin

или даже:

git push

но будет ли это делать то, что вы хотите, зависит от того, согласны ли вы с «ранними авторами git», что исходные значения по умолчанию разумны, или с «более поздними авторами», что исходные значения по умолчанию неразумны. Итак, когда вы захотите выполнить все настройки (в конечном итоге), просмотрите вопрос (и ответы), на который вы ссылаетесь.

Что касается имени origin/amd_qlp_testerв первую очередь: это фактически локальный объект (имя, хранящееся внутри вашего репо), даже если оно называется «удаленная ветвь». Это лучшая догадка мерзавца, «где amd_qlp_testerэто там». Git обновляет его, когда может .

торек
источник
1
Спасибо за объяснение, теперь я думаю, что все ясно. Мне нравится быть точным, поэтому я буду придерживаться этого, git push origin amd_qlp_testerпока мне не понадобится делать более сложные вещи :)
code_fodder
2

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

  • git push origin amd_qlp_tester- нажать на ветку, расположенную на удаленном компьютере, которая называется originудаленной веткой amd_qlp_tester.
  • git push -u origin amd_qlp_tester- то же самое, что и предыдущий, но устанавливает восходящее соединение локальной ветки с удаленной веткой, чтобы в следующий раз вы могли просто использовать, git push/pullесли еще не связались (нужно сделать это только один раз).
  • git push - После того, как вы настроили апстрим, вы можете просто использовать эту более короткую версию.

Примечание -u вариант является краткой версией --set-upstream- они такие же.

code_fodder
источник