Як ви натискаєте лише одну гілку Git (і жодну іншу гілку)?


247

Я працюю в локальному сховищі git. Є дві гілки,master і feature_x.

Я хочу натиснути feature_x на віддалений репо, але я не хочу натискати зміни на masterгілці.

Буде git push origin feature_xз могоfeature_x філії ( feature_xвідділення вже існує на віддаленому)?

Я не хочу тестувати це на своїй коробці, тому що зараз не можу підштовхнути майстра.


Погляньте сюди: віддалено та тут: натисніть гілку на github Звучить так, як це спрацювало б.
ін.

Відповіді:


376

так, просто виконайте наступне

git checkout feature_x
git push origin feature_x

54
За допомогою сучасного git ви можете мати можливість просто "git push origin HEAD", або навіть "git push HEAD", щоб натиснути лише поточну перевірену гілку.
Якуб Нарбський

2
Чи потрібно оформляти замовлення на функцію function_x?
hd

5
так, тому що якщо ви перебуваєте на майстрі, він спробує підштовхнути локальну гілку master до віддаленої гілки feature_x. не потрібно спочатку оформити замовлення, вам доведеться зробити "git push origin feature_x:
feature_x

1
@cpjolicoeur Я бачив у інших питаннях (наприклад: тут ), які вони роблять git push -u origin <branch-name>. Однак ви цього не згадали. Це потрібно?
riroo

3
@miss_R -uопція в git-pushкоманді встановить посилання на течію для відстеження щойно висунутого гілки. Це зробить такі речі, як git-pullна цій гілці в майбутньому вже знати, з якої гілки вийти, не вказуючи її. Це не потрібно як варіант для просування однієї гілки, але широко використовується, тому що багато людей хочуть зробити так, щоб місцева гілка відстежувала віддалену гілку, на яку вона просувається.
cpjolicoeur

74

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

git config push.default upstream

Це означає, що git оновить лише поточну (перевірену) гілку, коли ви натискаєте git.

Інші допустимі варіанти:

  • nothing: Нічого не натискайте (помилка), якщо конкретно не вказано уточнення . Це в першу чергу призначене для людей, які хочуть уникати помилок, завжди будучи явними.
  • matching: Натисніть на всі гілки з однаковою назвою з обох кінців. (параметр за замовчуванням до версії 1.7.11)
  • upstream: Натисніть на поточну гілку до її верхньої гілки. Цей режим має сенс лише в тому випадку, якщо ви переходите до того ж сховища, з якого ви звичайно виходили б (тобто центральний робочий процес ). Не потрібно мати однакову назву для місцевого та віддаленого відділення.
  • tracking: Застаріле, upstreamзамість цього використовуйте .
  • current: Натисніть поточну гілку до віддаленої гілки з тим самим іменем на кінці прийому. Працює як в центральному, так і в не центральному робочому процесі.
  • simple: [доступно з версії 1.7.11] в централізованому робочому процесі, працюйте як upstreamіз додатковою безпекою, щоб відмовитися від натискання, якщо назва гілки вище за течією відрізняється від локальної. Під час натискання на пульт, який відрізняється від пульта, з якого зазвичай витягуєте, працюйте як current. Це найбезпечніший варіант і підходить для новачків. Цей режим став за замовчуванням у Git 2.0.

2
Дякую, currentбуло те, що я шукав, за замовчуванням git pushу fooвідділенні підштовхне його доorigin/foo гілки.
Доріан

@ Доріан дякую, я згоден current має більше сенсу як дефолт.
Золтан

@Dorian, @ Zoltán - я вважаю, що simpleце більше сенсу як дефолт. Я оновив відповідь "коли використовувати що". Pls мають вигляд.
Картік Босе

1
Примітка: з моменту версії 2 git значення за замовчуванням змінилось на simple .
Даніель

8

Незначне оновлення на відповідь Картік Босе - ви можете налаштувати git у всьому світі та впливати на те, щоб усі ваші робочі простори поводилися таким чином:

git config --global push.default upstream

upstream wasnt, визнаний для мене дійсним налаштуванням, довелося замість цього поставити "current"
коник

-2

Отже, скажімо, у вас є локальний foo-відділення, віддалене покликане походження та віддалене походження / master-відділення.

Щоб підштовхнути вміст foo до початкового / ведучого, спершу потрібно встановити його вище:

git checkout foo
git branch -u origin/master

Потім ви можете перейти до цієї гілки за допомогою:

git push origin HEAD:master

В останній команді ви можете додати --force для заміни всієї історії походження / головного на історію foo.

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