Зміна за замовчуванням пульта Git на "push"


228

Я хочу змінити віддалене відділення Git за замовчуванням, щоб я міг просто

git push

Замість:

git push upstream

В даний час це встановлено на початкове віддалене, і я хочу встановити його на інший віддалений.

Я спробував видалити оригінальний (клонований з) пульт

git remote rm origin

Що видалив оригінальний пульт. Але це не вирішує git pushпроблему. Я все ще отримую:

фатально: Не налаштоване призначення натискання. Або вказати URL-адресу з
командного рядка або налаштувати віддалене сховище, використовуючи ...

Я також спробував пограти з:

git remote set-url --push myfork origin

та інші варіанти, але жоден, схоже, не працює (можливо, тому що я видалив джерело віддаленого файлу занадто рано?)

Після відповіді тут я спробував змінити:

git config push.default upstream (or matching)

але жоден не працював.

Відповіді:


215

Ви можете використовувати git push -u <remote_name> <local_branch_name>для встановлення за замовчуванням за течією. Детальнішу інформацію див. У документації на git push .


1
Не працює: я отримую '' 'fatal:' origin 'не видається фатальним сховищем git: віддалений кінець зненацька завис' '' можливо тому, що я видалив початкове джерело перед тим, як рухатись далі. щойно знайшов робоче рішення,
— оновлю

34
В якості додаткового уточнення повинен бути синтаксис git push -u <remote_name> <local_branch_name>:<corresponding_remote_branch_name>.
— Marco Lazzeri

33
Приклад: git push -u origin master:master.
— starbeamrainbowlabs

1
Після встановлення пульта за замовчуванням ... чи все-таки не можна змусити git pushнатиснути віддалену гілку поточної локальної гілки? Я маю на увазі зробити це це означає, що я повинен запускати цю команду для кожної гілки. Правильно? Чи не можу я просто зробити початкову установку для всього репо? @MarcoLazzeri
— мед

2
@starbeamrainbowlabs Недостатньо git push -u origin master? Ви просто ілюструєте повний синтаксис?
— Йосія Йодер

108

Щоб змінити, який віддалений вихідний потік "підключений" до вашої гілки, використовуйте git branchкоманду з прапором конфігурації вище.

Переконайтесь, що пульт існує спочатку:

git remote -vv

Встановіть бажаний пульт для поточної (перевіреної) гілки:

git branch --set-upstream-to <remote-name>

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

git branch -vv


2
Щойно спробував git branch --set-upstream-to myforkі отримав помилку:> помилка: невідомий варіант `set-upstream-to 'Я
— виконую

3
Синтаксис змінений в 1.8 см stackoverflow.com/questions/520650 / ...
— jtniehof

1
Дивіться таку відповідь: stackoverflow.com/a/2432799/1820106 ( git remote set-url origin PATH_TO_REMOTE)
— Yinon Ehrlich

10
git branch -u <remotename>/<branch>працював на мене. Команда виконувалася з перевіреною місцевою гілкою інтересів. Дивіться "Відстеження гілок" в git-scm.com/book/it/v2/Git-Branching-Remote-Branches
— norio

2
Дослідний висновок віддаленої команди є дійсно справедливим git remote -vабо git remote --verbose. -vv«S додатковий v є зайвим.
— Artif3x

45

Робота з Git 2.3.2 ...

git branch --set-upstream-to myfork/master

Тепер status, pushі pullзагострені на myforkвіддалений


Це працює, коли ви просто хочете встановити за замовчуванням pullтакож.
— StingyJack

39

Ви можете легко змінити віддалений за замовчуванням для гілок все відразу, за допомогою цієї команди

git push -u <remote_name> --all

14
Зауважимо лише, що це підштовхне їх усіх, а також зміни їх віддаленого пульта.
— poolie

16

Якщо ви зробили git push origin -u localBranchName:remoteBranchNameта в послідовно виконаних git pushкомандах, ви отримуєте помилки, які тоді не виникають, виконайте наступні дії:

  1. git remote -v

Перевірте, чи є якийсь пульт, який мене не хвилює. Видаліть їх за допомогоюgit remote remove 'name'

  1. git config --edit

Шукайте можливі ознаки старого / неіснуючого пульта. Шукайте pushdefault:

[remote]
  pushdefault = oldremote

Оновіть oldremoteзначення та збережіть.

git push повинні працювати зараз.


2
Дякую! Я, як правило, додаю -uпри використанні git pushна інший пульт завдяки м’язовій пам'яті. Це робить даний пульт за замовчуванням, його повернення за допомогою git config --edit(або натискання знову та встановлення нового пульта) вирішило проблему.
— Тім Візе

13

Просто уточнення (з використанням git версії 1.7.9.5 на ubuntu 12.04):

Git додасть / видалить пульт. Це віддалені екземпляри git із доданим сервером.

git remote add myremote git://remoteurl

Ви можете отримати вказаний сховище git так:

git fetch myremote

Здається, це створює гілку з назвою "myremote", однак пульт для гілки не встановлюється автоматично. Для цього потрібно зробити наступне:

Спочатку переконайтеся, що у вас є ця проблема, тобто

git config -l | grep myremote

Ви повинні побачити щось на кшталт:

remote.myremote.url=git://remoteurl
remote.myremote.fetch=+refs/heads/*:refs/remotes/myremote/*
branch.myremote.remote=.
branch.myremote.merge=refs/heads/master

Якщо ви бачите branch.myremote.remote=., то слід продовжити:

git config branch.myremote.remote myremote
git checkout myremote
git pull

Тепер ви повинні бути в курсі віддаленого сховища, і ваші тяги / натиски повинні бути прив'язані до відповідного пульта. Ви можете перемикати пульти таким чином, за галуззю . [Примітка] [1]

Згідно з офіційною документацією Git Config , ви можете встановити типову гілку за замовчуванням (просто шукайте віддалений.pushdefault на цій сторінці), проте майте на увазі, що це не вплине на сховища / гілки, які вже існують, тому це буде працювати, але лише для нових сховищ / відділень. Ви повинні пам’ятати, що --globalбуде встановлено специфічні для користувача налаштування репозиторію (~ / .gitconfig), --systemвстановлено загальносистемні параметри сховища (/ etc / gitconfig), і жоден прапор не встановить параметри конфігурації для поточного сховища (./.gitconfig).

Також слід зазначити, що параметр config push.default призначений для налаштування поведінки ref-spec , а не віддаленої поведінки.

[1]: git branch --set-upstream myotherremoteзазвичай працює тут, проте git поскаржиться, що він не встановить гілку як власний пульт, якщо git branch --set-upstream myremoteвикористовується. Однак я вважаю, що це неправильна поведінка.


Замість цього git config -l | grep myremoteви можете просто використовувати:git config --get branch.myremote.remote
— Murmel

@Murmel по-перше, це вікі спільноти, тому сміливо вдосконалюйтесь, по-друге, --getпередбачає особливу поведінку, я зазначаю, що існують інші способи налаштування потоків, але це забезпечує спосіб пошуку інформації, не покладаючись лише на інструменти git. правильно. Git не ідеальний, краще зрозуміти дані, що він робить, а потім сподіватися, що його виклики спрацюють належним чином.
— smaudet

10

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

напр.

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = git@gitea.xxx.be:fii/web2016.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "bugfix/#8302"]
    remote = origin
    merge = "refs/heads/bugfix/#8302"
[branch "feature/#8331"]
    remote = origin
    merge = "refs/heads/feature/#8331"
[remote "scm"]
    url = https://scm.xxx.be/git/web2016bs.git
    fetch = +refs/heads/*:refs/remotes/scm/*

ви можете внести в цей файл вручну зміни, щоб видалити небажаний пульт, або оновити віддалені за замовчуванням для різних ваших гілок

  • Звернути увагу! при зміні або видаленні віддалених пристроїв обов'язково оновіть усі посилання на нього в цьому конфігураційному файлі

5

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

git config remote.origin.url url-to-my-other-remote

5
Це не гарне рішення, користувачі git повинні мати можливість витягувати / натискати з декількох сховищ - хоча це дозволить вам змінити пульт оригіналу, це не означає, що ви ДОЛЖНЕ змінити віддалений оригінал, оскільки це, ймовірно, означає, що там - це ряд невідповідностей між віддаленими. Злиття допоможе тут, але це і простіше, і зберігає більше історії, щоб встановити пульт на новій гілці.
— smaudet

Не правильний спосіб це зробити ... @ відповідь Джордана більш
— доречна

1
Дивіться також: stackoverflow.com/a/2432799/1820106 ( git remote set-url origin PATH_TO_REMOTE)
— Yinon Ehrlich

5

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

Спочатку перегляньте місцеву гілку, яку ви хочете прив’язати до віддаленої гілки:

git checkout mybranch

Далі:

git branch -u origin/mybranch

де:

git branch -u {remote name}/{branch name}

Ви повинні отримати повідомлення:

"Branch mybranch set up to track remote branch mybranch from origin."

3

У моєму випадку я виправив наступне: * run git config --edit * У файлі git config:

[branch "master"]
remote = origin # <--- change the default origin here

0

git remote set-url --push origin має працювати, як ви вже згадували, але вам потрібно чітко вказати URL замість альтернативного віддаленого імені, наприклад

git remote set-url --push origin git@github.com:contributor/repo.git

Ви можете підтвердити, чи спрацювало це, виконавши git remote -v. Напр

λ ~/go/src/github.com/stretchr/testify/ master git remote -v
fork    git@github.com:contributor/testify.git (fetch)
fork    git@github.com:contributor/testify.git (push)
origin  git@github.com:stretchr/testify (fetch)
origin  git@github.com:contributor/testify.git (push)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.