git push до певної гілки


102

Навіть прочитавши це запитання: 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

Відповіді:


92

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

За замовчуванням "віддалений" базується на поточній конфігурації гілки (у цьому випадку це дійсно буде origin). Гілка (и) для надсилання значень за замовчуванням (у поточних версіях git) на значення :if, якщо це не встановлено, що означає 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

112

Якщо ваша локальна гілка та віддалена гілка однакові, ви можете просто зробити це:

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", що оригінальні за замовчуванням є розумними, або "пізнішими авторами git", що оригінальні за замовчуванням не є розумними. Отже, коли ви хочете зробити все, що стосується конфігурації (врешті-решт), перегляньте запитання (і відповіді), до якого ви пов’язали.

Що стосується найменування origin/amd_qlp_testerв першу чергу: це фактично локальна сутність (назва, що зберігається всередині вашої репо), хоча вона називається "віддаленою гілкою". Це найкраща здогадка git про те, "де 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- вони однакові.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.