Git:ブランチのデフォルト構成リモートはどれですか?


192

リモートのベアリポジトリがありますhub。私はmaster支店でのみ働いています。以下のこのエラーメッセージの最後の文は、「現在のブランチにデフォルトで設定されているリモート」を見つけるにはどうすればよいのか疑問に思います。そして、どのように設定しますか?

[myserver]~/progs $ git remote -v
hub     ~/sitehub/progs.git/ (fetch)
hub     ~/sitehub/progs.git/ (push)

[myserver]~/progs $ git branch -r
  hub/master

[myserver]~/progs $ cat .git/HEAD
ref: refs/heads/master

[myserver]~/progs $ git pull hub
You asked to pull from the remote 'hub', but did not specify
a branch. Because this is not the default configured remote
for your current branch, you must specify a branch on the command line.

回答:


230

リモートブランチを追跡する

git-branchのtrackオプションを使用して、プッシュおよびプル用のデフォルトのリモートリポジトリを指定できます。通常は、ローカルマスターブランチを作成するときに--trackオプションを指定してこれを行いますが、すでに存在しているため、次のように手動で設定を更新します。

あなたの編集 .git/config

[branch "master"]
  remote = origin
  merge = refs/heads/master

これで、単純にgit pushとgit pullを実行できます。

[ ソース ]


OPが設定した場合、これも設定されませんgit pull hub masterか?
Ryan Bigg、2011年

@Ryan Bigg:自動的に行われるわけではありません。そうでなければ、常に設定を台無しにしてしまいます。
2011年

36
この理由でgitコマンドが存在するのに、なぜ設定ファイルを編集するのですか?
urschrei 2011年

43
git branch --set-upstream local_branch remote / remote_branch(またはプッシュするときは、以下で詳しく説明します)
urschrei

25
@scragz:まさか!コマンドアプローチは、.gitconfigが意味のある状態のままであることを保証します。
smci

260

あなたはそれをより簡単に行うことができ、あなた.gitconfigが意味のある状態に置かれることを保証します:

Gitバージョンv1.8.0以降を使用する

git push -u hub master 押すとき、または:
git branch -u hub/master

または

(これは、リモート設定します現在チェックアウトブランチhub/master
git branch --set-upstream-to hub/master

または

(これにより、ブランチのリモートがに設定さbranch_nameれますhub/master
git branch branch_name --set-upstream-to hub/master

v1.7.x以前使用している場合

使用する必要があります--set-upstream
git branch --set-upstream master hub/master


3
疑問に思う方のために:2番目のコマンドは既存のブランチで使用できます
Eric Hu

1
:エリック・HUここに私の答えで説明するように、@ stackoverflow.com/questions/4878249/...
urschrei

1
このset-upstream[-to]コマンドは、現在構成されているリモートを変更します。元の投稿者は、デフォルトで設定されたリモートについて尋ねました。確かにそれは全く同じコンセプトではないのですか?
Steve Pitchers 2013年

1
各ブランチには現在構成されているリモートがあり、そのリモートのどのブランチがローカルブランチに対応するかを指定します。デフォルトのリモート構成されたが、分岐が押されたり、ユーザーが明示的に指定しない場合は、引っ張られるかが決まります。この答えは現在のものを設定するだけです。承認された回答(手動で編集)では、デフォルトの回答を設定することもできます。手で編集する必要のないコマンドを知っている人はいますか?
Steve Pitchers 2013年

1
--set-upstream-to.git/config@scragzが彼の回答で提案したのとまったく同じ変更を加えました。
strah

26

完全を期すために、前の回答では、上流ブランチを設定する方法を示していますが、それを表示する方法は示していません。

これにはいくつかの方法があります。

git branch -vvすべてのブランチの情報を表示します。(ほとんどの端末では青でフォーマットされています)

cat .git/config これも示しています。

参考のため:


-1

マスターなどのブランチの効果的なプッシュリモートを取得するコマンドは次のとおりです。

git config branch.master.pushRemote || git config remote.pushDefault || git config branch.master.remote

理由は次のとおりです(「man git config」出力から):

branch.name.remote [...]は、git fetchとgit pushに、どのリモートからフェッチ/プッシュするかを指示します[...] [プッシュ用]は、remote.pushDefault(すべてのブランチ用)[および]現在のブランチ[..]は、branch.name.pushRemote [...] によってさらにオーバーライドされます

何らかの理由で、「man git push」は、branch.name.remoteについてのみ通知します(3つの優先順位が最も低い場合でも)+設定されていない場合、デフォルトはoriginにプッシュされると誤って述べています-そうではありません。リポジトリのクローンを作成すると、branch.name.remoteはoriginに設定されますが、この設定を削除すると、まだoriginリモートがあるにもかかわらず、git pushは失敗します。


この質問は、より有用な回答ですでに回答されています。
オースティンシェーファー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.