Як я можу легко натиснути локальну гілку Git до пульта з іншою назвою?


175

Мені було цікаво, чи існує простий спосіб натиснути та витягнути локальну гілку з віддаленою гілкою з іншою назвою, не завжди вказуючи обидві назви.

Наприклад:

$ git clone myrepo.git
$ git checkout -b newb
$ ...
$ git commit -m "Some change"
$ git push origin newb:remote_branch_name

Тепер, якщо хтось оновлює ім’я_користувача, я можу:

$ git pull

І все злито / швидко перенесено. Однак якщо я вношу зміни в місцевий "newb", я не можу:

$ git push

Натомість я повинен:

% git push origin newb:remote_branch_name

Здається, трохи нерозумно. Якщо git-pullвикористовується, git-config branch.newb.mergeщоб визначити, звідки вийти, чому не міг git-pushбути подібний параметр конфігурації? Чи є приємний ярлик для цього чи я повинен просто продовжувати довгий шлях?

Відповіді:


93

Звичайно. Просто встановіть push.defaultдля upstreamпідштовхнути гілки їх вище за потоку (що те ж саме , що pullбуде тягнути з, визначається branch.newb.merge), а не штовхаючи гілки на ті , які збігаються в назві (що є значенням за замовчуванням для push.default, matching).

git config push.default upstream

Зверніть увагу , що це мало звичай називатися trackingНЕ upstreamперш , ніж Git 1.7.4.2, так що якщо ви використовуєте стару версію Git, використовуйте trackingзамість цього. push.defaultОпція була додана в Git 1.6.4, так що якщо ви перебуваєте на старій версії , ніж це, ви не будете мати цю опцію на всіх і необхідно явно вказати гілку , щоб підштовхнути до.


Це було все! Це стосується всіх гілок, які відстежують, але це нормально. Дякую!
jmacdonagh

Мені було б цікаво дізнатись, чи існує стенограма для назви філії, яку я перевірив. Я можу просто захотіти, git push buildserver .:test_thisде .повинна бути назва місцевої філії, яку я не обов'язково знаю. Я міг би підглянути це, звичайно, але якби для цього була коротка рука, як крапка, було б круто.
Фредерік Норд

2
@FrederickNord HEAD- це стенограма, яку ви шукаєте. HEAD- це те, що вказує на перевірену в даний час гілку, або безпосередньо на певний комітет, якщо у вас є відірвана голова.
Брайан Кемпбелл

Дякую! Це виправило Updates were rejected because a pushed branch tip is behind its remoteпомилку для мене. Моє місцеве репо було оновлене, але назви були просто різними.
canhazbits

171

Коли ви виконуєте початковий натиск, додайте параметр -u :

git push -u origin my_branch:remote_branch

Подальші поштовхи підуть куди хочеш.

Редагувати:

Відповідно до коментаря, це створює лише тягу.

git branch --set-upstream

повинен це зробити.


7
-uпросто встановлює висхідний потік, який відповідно до питання вже встановлений. Він повинен встановити push.defaultдля upstremтого , щоб pushдотримуватися настройки вгору по течії, так як за замовчуванням тільки pullробить.
Брайан Кемпбелл

2
Це, здається, не працює - принаймні, не на версії ніколи
Thomas Watson,

git гілка - встановлення вгору за течією, лише після цього потрібно встановити налаштування витягування "pushRemote".
звідки відбулосявизначення

Я не думаю git branch --set-upstream за потрібне. Примітка: мій git --version- 2.17.1.
Габріель Степлес

15

Тепер команда Адама застаріла. Ви можете використовувати:

git branch --set-upstream-to origin/my_remote_branch my_local_branch

встановити верхню гілку my_local_branchдо origin/my_remote_branch.


6
Чи можете ви надати посилання, що підтримує інформацію, якою ви ділитесь, про -у, як застарілу? Документи для останньої версії щодо натиску на git-scm.com, здається, підказують, що вона актуальна. Дякую заздалегідь - читачам може бути дуже корисно продовжити додаткову інформацію.
Kay V

Погодьтеся з @KayV, тим більше, що я отримав це повідомлення під час спроби створити нову віддалену гілку з назвою, відмінним від моєї місцевої гілки: "Якщо ви плануєте виштовхнути нову локальну гілку, яка буде відслідковувати її віддалений аналог, можливо, ви захочете використовувати "git push -u" для встановлення конфігурації висхідного потоку під час натискання. "
ФББ

0

Ось процес, який працював на мене.

git clone original-repo-url
git remote rename origin upstream
git remote add origin new-repo-url

Тепер ваше нове репо буде "походженням", а початкове репо - "вище". Підтвердіть це за допомогою запуску git remote -v. (Побічна примітка: Вихідний потік використовується для отримання вихідного репо-репортажу, щоб зберегти локальну копію синхронізованою з проектом, в який ви хочете зробити свій внесок, а джерело використовується для витягування та натискання, оскільки ви можете внести свій внесок у власне репо).

git push origin master

Тепер ваш новий віддалений майстер репо (на Github) буде синхронізований з оригінальним майстром, але він не матиме жодної гілки функцій.

git rebase upstream/branch-name
git push origin master

Rebase - це розумне злиття. Потім знову натисніть на майстер, і ви побачите вибрану гілку функції як майстра на новому репо.

Необов’язково:

git remote rm upstream
git remote add upstream new-repo-url

0

Я стикаюся з тим самим випуском вже досить давно. Нарешті у мене є набір тверджень, тому мені не потрібно робити git push origin local:remoteщоразу. Я дотримувався таких:

git branch --set-upstream-to origin/remote_branch_name
git config push.default upstream
git push

Після встановлення висхідної лінії до віддаленої гілки з іншим іменем (1-й рядок), а потім зробивши її вище за течією за замовчуванням (2-й рядок), 3-й рядок тепер буде дотримуватися цих правил і підніметься до встановленої upstream.

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