38

ドキュメントによると、git pullgitフェッチを実行してからgitマージを実行しますが、その場合、 git pulloriginmasterを実行するとgitfetchorigin masterを実行する必要がありますか?ただし、そうしているようには見えません。これが例です。

私のリモートオリジンマスター(私の場合はGitHub上)に次の履歴があるとします。

commit 1111111 : my first commit
commit 2222222 : a commit from someone else

そして、私は次のショーをしているので、ローカルで最初のコミットしかありません

git checkout master
git log --pretty=format:'%h' -n 1
1111111

git checkout origin/master
git log --pretty=format:'%h' -n 1
1111111

ここからプルを実行し、次のように結果を確認します。

git checkout master
git pull origin master

git log --pretty=format:'%h' -n 1
2222222

git checkout origin/master
git log --pretty=format:'%h' -n 1
1111111

ご覧のとおり、プルは実際にはリモートオリジンからの新しいコミットでマスターブランチを更新しましたが、ローカルオリジン/マスターはまだ元の場所にあります。私に次のことを強制する

git fetch origin master

git checkout origin/master
git log --pretty=format:'%h' -n 1
2222222

これはgitpullの正しい動作ですか、それとも何かが正しく構成されていない可能性がありますか?git pull manページを調べたところ、これを示唆するものは何も見つかりませんでしたが、見逃した可能性があります。

4

4 に答える 4

30

少し奇妙ですが、git pull [remote] <refspec>実際に使用してもリモート参照は更新されません。特定の方法で考えると、ある程度意味があります。フェッチする特定の参照を指定しているため、リモートブランチについて何も検索する必要がないため、本質的にどのリモートブランチかがわかりません。更新する必要があります。もちろんそれは理解でき、最終的に修正されても驚かないでしょうが、それは既存の動作です。(メーリングリストにそれについてのメッセージがあるかもしれません-私は知りません。)

ただし、簡単に回避できます。を使用する場合git pull origin/master、リモートブランチを介して何をフェッチするかを指定しているため、そのリモートブランチを更新する必要があります。とにかくマスターブランチ(または他のブランチ追跡オリジン/マスター)を使用git pullしている場合は、デフォルトを入力するだけで、リモートブランチが更新されます。

これはgit-pullmanページに文書化されており、最も簡潔に例の下にありますが、他の場所にもあります。関連する部分:

次に、現在のブランチにリモートブランチをマージします。

$ git pull origin next

これにより、nextのコピーが一時的にFETCH_HEADに残りますが、リモート追跡ブランチは更新されません。リモートトラッキングブランチを使用して、フェッチとマージを呼び出すことで同じことができます。

$ git fetch origin
$ git merge origin/next
于 2011-12-31T22:02:40.130 に答える
0

リポジトリをフォークしたようで、フォークしたブランチが最新のコードで更新されていません

于 2019-05-31T19:53:32.297 に答える
0

私もこの問題を抱えていました-ブランチで「gitpull」を実行してからログをチェックしましたが、ログは更新されていませんでした。混乱している私は実際にgitpullからの出力を読みましたが、具体的にはgitにマージする場所を指示する必要があると述べています。これは、「git pull [remote][localbranch]」の行に沿ったコマンドによって実行されます。 git pulloriginnewfeature1"。

問題のある最初のコマンドの試行:

Z:\Abusers\jd\repo1> git pull
remote: Enumerating objects: 15, done.
remote: Counting objects: 100% (15/15), done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 16 (delta 7), reused 15 (delta 7), pack-reused 1
Unpacking objects: 100% (16/16), done.
From github.abc.com:group1/repo1
   06aefba..e5ed6ee  develop    -> origin/develop
   af689cb..b8667a6  newfeature1-> origin/newfeature1
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> newfeature1

動作中のコマンド:

Z:\Abusers\jd\repo1> git pull origin newfeature1
From github.abc.com:group1/repo1
* branch            newfeature1-> FETCH_HEAD
Updating af689cb..b8667a6
Fast-forward
.../file1.py                |   2 +-
abc/yes1/cool1.a        | Bin 0 -> 106329 bytes
.../abc.py                    |   7 ++++---
3 files changed, 5 insertions(+), 4 deletions(-)
create mode 100644 abc/yes1/cool1.a
于 2020-04-28T17:56:33.290 に答える
0

originたとえば以外のものからプルを実行する場合

git pull <url> ...

urlが実際にgitと同じrepo/urlであっても、リモートのリモートorigin トラッキングブランチは更新されません。基本的に、このgit呼び出しで作業ツリーにリンクされていないデフォルトのリポジトリ「コンテナ」です。origin

これを修正するには、デフォルトで次のようなリモート<->ローカル(オリジン)マッピング(refspec)を追加する必要があります+refs/heads/*:refs/remotes/origin/*

git pull <anything> +refs/heads/*:refs/remotes/origin/*
于 2021-09-28T16:50:06.527 に答える