Как скопировать локальную ветку Git в удаленное репо

127

На данный момент я сделал следующие шаги:

  1. Клонировано удаленное репозиторий Git
  2. Разветвил основную ветку до экспериментальной
  3. отредактировал / протестировал / зафиксировал код в экспериментальной ветке

Сейчас я не готов объединить экспериментальное с основным. Однако я хочу вернуть его в удаленное репо, поскольку это репозиторий, которым я делюсь с несколькими коллегами. Я бы хотел, чтобы они увидели, что я сделал в экспериментальной ветке. Обычно я просто получаю доступ к удаленному репо через SSH.

Как поделиться своей локальной веткой в ​​удаленном репо, не затрагивая главную ветку удаленного репо?

Coocoo4Cocoa
источник
Эта ссылка также очень полезна в этом аспекте. Делимся ветками git
Вишну Кумар

Ответы:

157

Согласно странице руководства git push :

 git push origin experimental

Найдите ссылку, которая соответствует experimentalв исходном репозитории (скорее всего, она найдет refs/heads/experimental), и обновите ту же ссылку (например refs/heads/experimental) в исходном репозитории с ее помощью.
Если experimentalбы не существовал удаленно, он был бы создан .

Это то же самое, что:

git push origin experimental:refs/heads/experimental

Создайте ветку experimentalв исходном репозитории, скопировав текущую experimentalветку.
Эта форма нужна только для создания новой ветки или тега в удаленном репозитории, когда локальное имя и удаленное имя отличаются ; в противном случае имя ссылки будет работать само по себе.

Или, как упоминалось в подсказке git , вы можете настроить «Удаленный доступ к ветке по умолчанию»:

Вы можете использовать git config, чтобы назначить пульт по умолчанию для данной ветки. Этот пульт по умолчанию будет использоваться для отправки этой ветки, если не указано иное.

Это уже сделано для вас, когда вы используете git clone, что позволяет использовать git push без каких-либо аргументов, чтобы подтолкнуть локальную главную ветвь для обновления главной ветки исходного репозитория.

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

можно использовать, чтобы указать это вручную.


Ян предлагает (для мерзавец> = 1.7.0 ) в push -u(или push --set-upstreamвариант):

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

Таким образом, вам не нужно делать никаких git config.

git push -u origin experimental
VonC
источник
12
Вы должны использовать -uопцию для, pushчтобы убедиться, что ваш локальный филиал отслеживает удаленный после публикации его. Если вы забыли использовать эту -uопцию, вы можете просто ввести git push -uпотом в ветке, и тогда все git pullбудет работать.
янв.
Я заметил, что когда вы это делаете git push origin experimental, нет никаких свидетельств загрузки каких-либо пакетов. Похоже, что в пульте дистанционного управления уже есть все материалы, полученные от вашего предыдущего нажатия; его просто нужно подключить к реф .
Kaz
@Kaz: у него был бы весь материал, если бы эти новые коммиты уже были отправлены в другую ветку на удаленном компьютере. В этом случае git push origin experimentalпросто создаст ветку experimentalна пульте дистанционного управления.
VonC
Спасибо! Ваш ответ был очень полезным.
hakre
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

Вот авторитетная страница github для удаленного управления github http://github.com/guides/push-a-branch-to-github . Это поможет вам ответить на все ваши вопросы.

dylanfm
источник
Разве это не перемещает его в основную ветвь, или он неявно создаст origin / same_branch_name_as_local?
Coocoo4Cocoa
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.

Иван Присяжный
источник