2

私のセットアップは次のとおりです。

$ git remote show origin
* remote origin
  Fetch URL: ssh://repo.xxx/project.git
  Push  URL: ssh://repo.xxx/project.git
  HEAD branch: master
  Remote branches:
    test  tracked
    test2 tracked
  Local refs configured for 'git push':
    test  pushes to test  (up to date)
    test2 pushes to test2 (up to date)

私はブランチ test2 にいて、新しいファイルを追加し、コミットしてプッシュします。ここで、'test' ブランチをチェックアウトし、git pull を発行します。

touch file.txt
git add file.txt
git commit -m "file.txt"
git push

Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 241 bytes, done.
Total 2 (delta 0), reused 0 (delta 0)
To ssh://repo.xxx/project.git
   98dd105..fbbd238  test2 -> test2

git checkout test
git pull

そして突然、「test2」ブランチの内容が現在の「test」ブランチにマージされます。

何が起こっている?

4

2 に答える 2

2

「git pull --help」のドキュメントには、マージするリモート ブランチがどのように決定されるかが記載されています。

下位互換性を損なわないようにするために、フェッチ後にマージするリモート ブランチを決定するルールが少し複雑になります。

   If explicit refspecs were given on the command line of git pull, they are all merged.

   When no refspec was given on the command line, then git pull uses the refspec from the configuration
   or $GIT_DIR/remotes/<origin>. In such cases, the following rules apply:

    1. If branch.<name>.merge configuration for the current branch <name> exists, that is the name of
       the branch at the remote site that is merged.

    2. If the refspec is a globbing one, nothing is merged.

    3. Otherwise the remote branch of the first refspec is merged.

あなたが説明したことから、ケース1は適用されないようです。それが適用された場合、「git remote show ...」は「「git pull」用に構成されたローカルブランチ:」行の下にブランチをリストするためです。したがって、ブランチ「test」にいる場合、ケース 3 は「origin/test2」と一致する必要があります。

もちろん、ローカル ブランチとリモート ブランチ間のマッピングを明示することで、この問題を回避できます。使用する:

$ git branch --set-upstream test origin/test
$ <similar for test2>
于 2012-04-18T15:29:39.387 に答える
0

git pull実行git fetch & git mergeするのと同じです。引数を渡さないので、originに接続し、2つのブランチを取得して現在のブランチにマージします。

ローカルtest1ブランチで使用することもgit fetch & git merge origin/test1、実行することもできますgit pull origin test1。フェッチ中にリモートで何が変更されたかを確認できるため、最初のものが好きです。

于 2012-04-18T14:20:10.147 に答える