Gitリモートの「プッシュ」のデフォルトを変更する


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
動作しません: '' '致命的:' origin 'はgitリポジトリの致命的ではないようです:リモートエンドが予期せずハングしました
有効な

34
追加の説明として、構文はでなければなりませんgit push -u <remote_name> <local_branch_name>:<corresponding_remote_branch_name>
Marco Lazzeri、2014

33
例:git push -u origin master:master
starbeamrainbowlabs 2015年

1
デフォルトのリモートを設定した後git push、現在のローカルブランチのリモートブランチを強制的にプッシュすることはできませんか?つまり、すべてのブランチに対してこのコマンドを実行する必要があります。正しい?リポジトリ全体の初期設定だけを行うことはできませんか?@MarcoLazzeri
ハニー

2
@starbeamrainbowlabs git push -u origin master十分ではありませんか?完全な構文を説明しているだけですか?
Josiah Yoder

108

どのアップストリームリモートがブランチに「ワイヤード」されているかを変更するにはgit branch、アップストリーム構成フラグを指定してコマンドを使用します。

最初にリモートが存在することを確認します。

git remote -vv

現在の(チェックアウトされた)ブランチの優先リモートを設定します。

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

ブランチが正しいアップストリームリモートでセットアップされていることを確認します。

git branch -vv


2
ただ、試してみましたgit branch --set-upstream-to myforkとエラーました:>エラー:不明なオプション`セット上流に」私はgitの1.7.9実行しているよ
alonisser

3
1.8で変更構文は、参照stackoverflow.com/questions/520650/...
jtniehof

1
次の回答を参照してください:stackoverflow.com/a/2432799/1820106git 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
紀夫

2
リモートコマンドの詳細な出力は、実際にはgit remote -vor git remote --verboseです。-vv余分なvが冗長です。
Artif3x 2018

45

Git 2.3.2での作業...

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

さてstatuspushそしてリモートpullを指しているmyfork


これは、デフォルトのみを設定する場合にpullも機能します。
StingyJack 2018年

39

このコマンドを使用して、ブランチのデフォルトのリモートを簡単に一度に簡単に変更できます

git push -u <remote_name> --all

14
注意してください、これはそれらすべてをプッシュするだけでなく、上流のリモートを変更します。
poolie 2016

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(またはもう一度押して新しいリモートを設定する)と、問題は解決しました。
TimVisée19年

13

明確化(ubuntu 12.04でgitバージョン1.7.9.5を使用):

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]

The Official Git Config Documentationによるとデフォルトのプッシュブランチをセットアップできます(そのページでremote.pushdefaultを検索するだけです)。ただし、これは既存のリポジトリ/ブランチには影響しないため、これは機能しますが、新しいリポジトリ/ブランチ用。--globalはユーザー固有のリポジ​​トリのデフォルト(〜/ .gitconfig)--systemを設定し、システム全体のリポジトリのデフォルト(/ etc / gitconfig)を設定し、フラグは現在のリポジトリ(./.gitconfig)の設定オプションを設定しないことを覚えておいてください。

また、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

@マーメルまず、これはコミュニティwikiですので、自由に改善してください。次に、--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

これを解決するために見つけた別のテクニック(最初にoriginを削除した場合でも、間違いのように見えます)はgit configを直接操作しています:

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

5
これは良い解決策ではありません。gitユーザーは複数のリポジトリからプル/プッシュできるはずです。これにより、オリジナルのリモートを変更できるようになりますが、オリジナルのリモートを変更する必要があるわけではありません。リモート間の非互換性の数です。Mergeはここで役立ちますが、新しいブランチにリモートを設定する方が簡単で、より多くの履歴を保持します。
smaudet 2014年

それを行う適切な方法ではありません... @ジョーダンの答えはより適切です
Raja Anbazhagan

1
次も参照してください:stackoverflow.com/a/2432799/1820106git 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

私の場合、私は次のように修正しました:*実行git config --edit * git構成ファイルで:

[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)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.