Зміна за замовчуванням пульта 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.