TL; DR:プルできない「追跡済み」ブランチがあります。
だからここに私は「バケット-4」にいます:
$ git branch -v
bucket-1 410f7b5 * gh-53 * gh-48 * "Share App"
bucket-2 7ed70a2 * upgrade to SOLR 3.3.0
bucket-3 400ffe4 * emergency fix prod issue
* bucket-4 64c2414 Merge branch 'bucket-3' into bucket-4
master 8dc4854 [ahead 1] * gh-73
リモコンから変更を取り込みたい:
$ git pull
You asked me to pull without telling me which branch you
want to merge with, and 'branch.bucket-4.merge' in
your configuration file does not tell me, either. Please
specify which branch you want to use on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details.
If you often merge with the same branch, you may want to
use something like the following in your configuration file:
[branch "bucket-4"]
remote = <nickname>
merge = <remote-ref>
[remote "<nickname>"]
url = <url>
fetch = <refspec>
See git-config(1) for details.
うーん、奇妙なことに、追跡ブランチとして「bucket-4」をすでに追加していると思いました。どれどれ:
$ git remote show Origin
* remote Origin
Fetch URL: [email protected]:abcd/main.git
Push URL: [email protected]:abcd/main.git
HEAD branch (remote HEAD is ambiguous, may be one of the following):
bucket-3
master
Remote branches:
bucket-1 tracked
bucket-2 tracked
bucket-3 tracked
bucket-4 tracked
master tracked
Local branches configured for 'git pull':
bucket-1 merges with remote bucket-1
bucket-2 merges with remote bucket-2
bucket-3 merges with remote bucket-3
master merges with remote master
Local refs configured for 'git Push':
bucket-1 pushes to bucket-1 (up to date)
bucket-2 pushes to bucket-2 (up to date)
bucket-3 pushes to bucket-3 (up to date)
bucket-4 pushes to bucket-4 (local out of date)
master pushes to master (fast-forwardable)
実際、バケット4は「追跡済み」とマークされていますが、何らかの理由でプッシュ用に設定されていますが、プル用には設定されていません。
.git/config
ファイルを見ると、ほとんどのブランチに「リモート」および「マージ」エントリがありますが、バケット4にはありません。これなしではどのように「追跡された」と見なされますか?
[remote "Origin"]
url = [email protected]:abcd/main.git
fetch = +refs/heads/*:refs/remotes/Origin/*
[branch "master"]
remote = Origin
merge = refs/heads/master
[branch "rel-2011-07-07"]
remote = Origin
merge = refs/heads/rel-2011-07-07
[branch "bucket-1"]
remote = Origin
merge = refs/heads/bucket-1
[branch "bucket-2"]
remote = Origin
merge = refs/heads/bucket-2
[branch]
autosetupmerge = true
[branch "bucket-3"]
remote = Origin
merge = refs/heads/bucket-3
ここで考えられる解決策は、構成ファイルにバケット4のremote/merge
エントリを追加することです。しかし、これなしでどのように「追跡」されると考えられますか? bucket-4はローカルで作成され、このレポジトリからサーバーにプッシュされたため、このブランチのトラッキングを適切に設定しなかったと思われます。
将来的にすべてのローカルブランチがリモートを適切に追跡するために追加できる構成はありますか?
ブランチをプッシュするときのデフォルトが、リモート上で一致する名前を持つブランチにプッシュすることであるという理由だけで、bucket-4 pushes to bucket-4
と表示されます。 (これは依然としてデフォルトであることに注意してください場合でもローカルブランチはリモート追跡ブランチを追跡しており、リモート追跡ブランチはリモートリポジトリ内の異なる名前のブランチに対応しています。)
Origin
のbucket-4
とbucket-4
の関連付けを設定する最も簡単な方法は、次にプッシュするときに次のことを確認することです。
git Push -u Origin bucket-4
または、次のこともできます。
git branch --set-upstream-to Origin/bucket-4
いくつかの質問に直接答えるには:
これなしではどのように「追跡」されたと見なされますか?
この場合、そうではありません-git configにbranch.bucket-4.merge
またはbranch.bucket-4.remote
がない場合は、リモートトラッキングブランチを追跡しません。 git remote show Origin
からの出力は、デフォルトでブランチがプッシュされる場所を示しています。
将来的にすべてのローカルブランチがリモートを適切に追跡するために追加できる構成はありますか?
あるとは思わない。 bucket-4
をローカルで作成したとき、たまたまリモートトラッキングブランチが存在していなかったため、その時点ではセットアップできません。非常に混乱したデフォルトの動作になります。 -u
をそのブランチの最初のgit Push
にそのアップストリームリポジトリに追加することを忘れないでください。
私はそれが助けになることを願っています。
git branch --set-upstream <branch> Origin/<branch>
は少なくとも1.8.2.3(私のバージョン)で非推奨になりました。
代わりにgit branch --set-upstream-to=Origin/<branch> <branch>
を使用してください。