Як скопіювати локальну гілку Git у віддалений репо


127

Поки що я зробив такі кроки:

  1. Клонували віддалену Git repo
  2. Розгалужено головну гілку на експериментальну
  3. відредагований / протестований / скоєний код в експериментальній галузі

Тепер я не готовий об'єднати експериментальний у головний. Однак я хочу повернути його до віддаленого репо, оскільки це сховище, яким я ділюсь з кількома колегами. Я хотів би, щоб вони побачили, що я робив в експериментальній галузі. Зазвичай я просто отримую доступ до віддаленого репо через SSH.

Як я можу поділити свою локальну гілку на віддаленому репо, не впливаючи на головну гілку віддаленого репо?


Це посилання також дуже корисно в цьому аспекті. Обмін гілками git
Vishnu Kumar

Відповіді:


157

Відповідно до сторінки посібника з git push :

 git push origin experimental

Знайдіть ref, який відповідає experimentalу вихідному сховищі (швидше за все, це знайдеться refs/heads/experimental), і оновіть той самий ref (наприклад refs/heads/experimental) у сховищі походження з ним.
Якби experimentalне існувало віддалено, воно було б створене .

Це те саме, що:

git push origin experimental:refs/heads/experimental

Створіть гілку experimentalв сховищі початкових даних, скопіювавши поточну experimentalгілку.
Ця форма потрібна лише для створення нової гілки чи тегу у віддаленому сховищі, коли локальна назва та віддалене ім’я відрізняються ; інакше ім'я посилання самостійно спрацює.

Або, як зазначено в git tip , ви можете встановити "Відділення за замовчуванням відділення":

Ви можете використовувати git config для призначення віддаленого за замовчуванням даній гілці. Цей дистанційний пульт за замовчуванням буде використовуватися для натискання цієї гілки, якщо не вказано інше

Це вже зроблено для вас, коли ви використовуєте git-клон, що дозволяє вам використовувати git push без жодних аргументів, щоб підштовхнути локальну головну гілку, щоб оновити головну гілку сховища початків.

git config branch.<name>.remote <remote> 

можна вказати це вручну.


Ян пропонує (для мерзотник> = 1.7.0 ) в push -u(або push --set-upstreamваріант):

Для кожної гілки, яка є оновленою або успішно висунутою, додайте посилання на течію (відстеження), використовувану без аргументів git-pull (1) та іншими командами.

Таким чином, вам не потрібно робити жодну конфігурацію git.

git push -u origin experimental

12
Вам слід скористатися цією -uопцією, pushщоб переконатися, що ваша локальна філія відстежує віддалену, після оприлюднення її. Якщо ви забудете скористатись -uопцією, ви можете просто ввести git push -uпізніше гілку, тоді git pullбуде працювати.
січня

Я помітив, що коли ви це робите git push origin experimental, жодних доказів завантаження пакетів немає. Схоже, на пульті вже є весь матеріал з вашого попереднього натискання; його просто потрібно підключити до реф .
Каз

@Kaz: у ній буде весь матеріал, якби ці нові комітети вже були висунуті в іншу гілку на дистанційному. У такому випадку git push origin experimentalпросто створити гілку experimentalна пульті.
VonC

Дякую! Ваша відповідь була дуже корисною.
хакре

15

Якщо назва вашої філії є experimental, а назва віддаленої - originто це

git push origin experimental

Той самий коментар, що і вище, але чи створює експериментальну гілку неявно на віддаленому репо, або це підштовхне до віддаленого майстра?
Coocoo4Cocoa

1
це штовхає експериментальну гілку і не торкається майстра ні на місцевій стороні, ні віддалено
Джон Даут,

1

git push -u <remote-name> <branch-name>не працює, якщо новостворена гілка не породжена з того ж репо, тобто якщо ви не створили нову гілку за допомогою git checkout -b new_branch, то це не буде працювати.

Наприклад, я локально клонував два сховища, і мені довелося скопіювати repo2 / branch1 в repo1 /, а потім натиснути його теж.

Це посилання допомогло мені перенести свою локальну гілку (клоновану з іншого репо) на мою віддалену репо:



0

тл; д-р

$ git push --set-upstream origin your_new_branch

більше інформації

після того, як ви зробили кілька комісій у своєму:

$ git checkout -b your_new_branch
$ git add file
$ git commit -m "changed file"

Ви натискаєте свою гілку, вказуючи верхню частину потоку в одне з віддалених сховищ, наприклад:

$ git push --set-upstream REMOTE YOUR_BRANCH

дистанційні можна побачити

$ git remote -v

зазвичай у вас буде один пульт за замовчуванням origin. тож команда виглядатиме так:

$ git push --set-upstream origin your_new_branch

і всі наступні поштовхи можуть здійснюватися просто за допомогою git push.

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