Git: Об’єднати віддалену гілку локально


205

Я витягнув усі віддалені гілки через git fetch --all. Я бачу гілку, яку я хотів би об'єднати через git branch -aвидалення / походження / ім'я гілки. Проблема в її недоступності. Я не можу злитися чи здійснити замовлення?

Відповіді:


321

Ви можете посилатися на ці гілки віддаленого відстеження ~ (перераховані з git branch -r) з назвою їх віддаленого.

Вам потрібно отримати віддалену гілку:

git fetch origin aRemoteBranch

Якщо ви хочете об'єднати одну з цих віддалених гілок у вашому місцевому відділенні:

git checkout master
git merge origin/aRemoteBranch

Примітка 1. Для великого репо з довгою історією ви хочете додати --depth=1параметр під час використання git fetch.

Примітка 2: Ці команди також працюють з іншими віддаленими репостами, щоб ви могли налаштувати an originі an, upstreamякщо ви працюєте на вилці.


Протилежний сценарій: Якщо ви хочете об'єднати одну з локальних гілок у віддалену гілку (на відміну від віддаленої гілки до локальної, як показано вище), вам слід спершу створити нову локальну гілку поверх зазначеної віддаленої гілки:

git checkout -b myBranch origin/aBranch
git merge anotherLocalBranch

Ідея тут полягає в об'єднанні "однієї з ваших місцевих відділень" (тут anotherLocalBranch) до віддаленої гілки ( origin/aBranch).
Для цього ви створюєте спочатку " myBranch" як представлення цієї віддаленої гілки: це git checkout -b myBranch origin/aBranchчастина.
І тоді ви можете злитися anotherLocalBranchз цим (до myBranch).


aLocalBranch? це помилка друку? Я думаю, ти мав намір написати "myBranch" знову?
knocte

1
@knocte Ні: "Якщо ви хочете об'єднати одну з ваших локальних гілок на одну з цих віддалених гілок": я зливаюсь " aLocalBranch" з " myBranch", а " myBranch" представляє віддалену гілку origin/aBranch.
VonC

Вибачте, що вас турбує @VonC, у попередньому коментарі ви говорите, що aLocalBranchце не помилка друку, але ви затвердили останню редакцію (через 2 роки!), Яка виправляє цю "ймовірну помилку". Я хотів поговорити з вами, перш ніж скасувати редагування.
рат

1
@rath Ви маєте рацію: схоже, я, можливо, переглянув цю редакцію трохи поспішно, межуючи з необережністю. Я змінив відповідь, щоб уточнити другий випадок злиття: чи можете ви сказати мені, чи це зараз зрозуміліше?
VonC

93

Щоразу, коли я зливаюсь, я потрапляю у гілку, яку хочу об'єднати (наприклад, " git checkout branch-i-am-working-in"), а потім виконую наступні дії:

git merge origin/branch-i-want-to-merge-from


2
Я думаю, ви повинні зробити git fetch origin/branch-i-want-to-merge-fromперше, правда?
Гінріх

9
git fetch origin developдаліgit merge origin/develop
Олів'є

2
@Olivier Ви маєте рацію, це правильний спосіб зробити це. git merge поодинці цього не зробиш.
Сем

1
дякую за розумну конвенцію про іменування, яка допомогла мені зрозуміти
tony2tones

1
@Akira Чи не git add .-> git commit -m <message>-> git push -u origin <branch>?
Хмара Чо

24

Спершу отримайте віддалену гілку від початку.

git fetch origin remote_branch_name

Об’єднайте віддалену гілку з місцевою гілкою

git merge origin/remote_branch_name

1
Це спрацювало для мене, коли прийнята відповідь повідомила Не те, що ми можемо об'єднати. У моєму випадку я злився з вилки іншого користувача мого репо на GitHub.
SJT

Чи потрібен перший збір команд? Чи "git merge origin / remote_branch_name" читає з віддаленої гілки, а не локальної. Тож мені не байдуже, оновлюється місцева філія чи ні?
Майкл Фрейджім

@MichaelFreidgeim Вам потрібно спершу зайти, щоб ваш локальний сховище знав стан віддаленого. Git pull - це, головним чином, отримання та злиття з поточної віддаленої версії вашої поточної гілки, але тепер ви отримуєте та зливаєтесь із іншої.stackoverflow.com/questions/292357 / ...
DZet

20

Можливо, ви хочете відстежувати віддалену гілку за допомогою локальної гілки:

  1. Створіть нове місцеве відділення: git branch new-local-branch
  2. Встановіть цю новостворену гілку для відстеження віддаленої гілки: git branch --set-upstream-to=origin/remote-branch new-local-branch
  3. Увійдіть у цю галузь: git checkout new-local-branch
  4. Перетягніть весь вміст віддаленої гілки в локальну гілку: git pull

3

Якщо ви вже отримали свою віддалену гілку і зробите git branch -a,
ви отримаєте щось на кшталт:

* 8.0
  xxx
  remotes/origin/xxx
  remotes/origin/8.0
  remotes/origin/HEAD -> origin/8.0
  remotes/rep_mirror/8.0

Після цього ви можете використовувати rep_mirror/8.0для локального позначення віддаленого відділення.

Хитрість полягає в тому, що remotes/rep_mirror/8.0це не працює, але rep_mirror/8.0робить.

Отже, така команда, як git merge -m "my msg" rep_mirror/8.0виконувати злиття.

(зауважте: це коментар до відповіді @VonC. Я ставлю це як ще одну відповідь, оскільки кодові блоки не вписуються у формат коментарів)

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