4

リモートブランチの名前と一致する名前のブランチを作成する場合、プッシュとプルの構成は異なる方法で設定されます。

現在のリモートブランチを持つ:

$ git branch -r
  origin/HEAD -> origin/master
  origin/master
  origin/someBranch

そして、リモートブランチを追跡するいくつかのローカルブランチを作成します。

$ git branch someBranch origin/someBranch 
  Branch someBranch set up to track remote branch someBranch from origin.
$ git branch someOtherBranch origin/someBranch 
  Branch someOtherBranch set up to track remote branch someBranch from origin.

追跡およびアップストリーム情報の確認:

$ git remote show origin
* remote origin
  Fetch URL: git@github.somewhere.com:maic/repo.git
  Push  URL: git@github.somewhere.com:maic/repo.git
  HEAD branch: master
  Remote branches:
    master     tracked
    someBranch tracked
  Local branches configured for 'git pull':
    master          merges with remote master
    someBranch      merges with remote someBranch
    someOtherBranch merges with remote someBranch
  Local refs configured for 'git push':
    master     pushes to master     (up to date)
    someBranch pushes to someBranch (up to date)

プッシュ構成なしで2番目のブランチが作成されたのはなぜですか?

4

1 に答える 1

5

ローカル ブランチは、ローカル ブランチとリモート ブランチの名前が同じ場合にのみ、リモート ブランチのプッシュを追跡できます。プルの場合、ローカル ブランチはリモート ブランチと同じ名前である必要はありません。興味深いことに、ブランチ 'foo' をセットアップしてリモート ブランチ 'origin/bar' を追跡する場合 ('git branch foo origin/bar' を使用)、リモート リポジトリに現在 'foo' という名前のブランチがない場合、後でリモートは foo という名前のブランチを取得し、ローカル ブランチ foo はその後 origin/foo を追跡します!

$ git clone dev1 dev2
Cloning into 'dev2'...
done.
$ cd dev2
#
# After clone, local master tracks remote master.
#
$ git remote show origin
* remote origin
Fetch URL: /Users/ebg/dev1
Push  URL: /Users/ebg/dev1
HEAD branch: master
Remote branch:
  master tracked
Local branch configured for 'git pull':
  master merges with remote master
Local ref configured for 'git push':
  master pushes to master (up to date)
#
# Create branch br1 to track origin/master
#
$ git branch br1 origin/master
Branch br1 set up to track remote branch master from origin.
#
# br1 tracks origin/master for pulling, not pushing
#
$ git remote show origin
* remote origin
Fetch URL: /Users/ebg/dev1
Push  URL: /Users/ebg/dev1
HEAD branch: master
Remote branch:
  master tracked
Local branches configured for 'git pull':
  br1    merges with remote master
  master merges with remote master
Local ref configured for 'git push':
  master pushes to master (up to date)
#
# Go to the origin repo and now create a new 'br1' branch
#
$ cd ../dev1
$ git checkout -b br1
Switched to a new branch 'br1'
#
# Go back to dev2, fetch origin
#
$ cd ../dev2
$ git fetch origin
From /Users/ebg/dev1
 * [new branch]      br1        -> origin/br1
#
# Now local branch 'br1' is tracking origin/br1 for pushing
#
$ git remote show origin
* remote origin
Fetch URL: /Users/ebg/dev1
Push  URL: /Users/ebg/dev1
HEAD branch (remote HEAD is ambiguous, may be one of the following):
  br1
 master
Remote branches:
  br1    tracked
  master tracked
Local branches configured for 'git pull':
  br1    merges with remote master
  master merges with remote master
Local refs configured for 'git push':
  br1    pushes to br1    (up to date)
  master pushes to master (up to date)

したがって、br1 はもともと master から pull/push されるはずでしたが、br1 が origin/master から pull され、存在を知らなかったブランチに push されることになります。

于 2012-04-07T04:16:03.897 に答える