2017-09-20 16 views
0

私は中央サーバからクローンされたローカルのgitリポジトリを持っています。ローカルマスタブランチの最後のコミットはコミット1です。git fetchは.git/refs/remotes/origin/masterを更新しません。

セントラルリポジトリには、コミット2という新しいブランチがあります。

ローカル参照番号を更新するためにgit fetch origin masterを実行しましたが、refs/remotes/origin/masterは更新されませんでした。

次に、.git/FETCH_HEADを確認しました。しかしこれは、すでにフェッチのために2

私のローカル設定をコミットし、次のとおりです。

[remote "origin"] 
     fetch = +refs/heads/*:refs/remotes/origin/* 
     url = ######### 

はまた、私は、中央にログインし、そこに裸のリポジトリをチェックすることができています。 project.git/refs/heads/masterです。コミット2

次に、git pull origin masterを実行しようとしました。驚いたことに、コミット2は私のローカルリポジトリにマージされます。

そしてgit diff origin/masterでも間の差分が1をコミットし、をコミット私を示しています。しかし、起源と私のローカルリポジトリは、この時点で同じ内容を持っています。

私の質問は以下のとおりです。

  1. git fetchは、原点からの最新の更新プログラムをダウンロードしていないのはなぜ?
  2. なぜgit pullがこの場合でも動作するのはなぜですか?
  3. ローカル設定またはセントラル設定の問題ですか?

答えて

0

あなたは

git fetch origin 

を実行する場合は、refs/remotes/origin/masterが更新されます。

あなたが起源をフェッチgitのに単一のREFを指定した場合、それはあなただけFETCH_HEAD

にそれを引っ張るしたいあなたは

git fetch origin master:refs/remotes/origin/master 

を実行することができ、それはまた

+0

ありがとうございます! git pullはorigin/masterを更新しないのですか?また時々git diff origin/masterが必要なので、diffをチェックする前にgit fetch originを実行する必要があります。 – DustinZhang

+0

'git pull'は単に' git fetch'と 'git merge'または' git rebase'(適切な引数付き)です。 – o11c

+0

また、 'git fetch --all'を実行するのに慣れています。私が現在追跡しているリモートが何であるか心配しなければならないので、他の人が現在取り組んでいるブランチの概要を簡単に知ることができます。 – o11c

0

ときに更新されますと仮定しgit fetch origin masterを実行するか、git pullを使用する場合は、に更新する必要があります。origin/masterを更新してください。

しかし、この種のアップデートは、最初にバージョン1.8.4(2013年8月リリース)のGitに組み込まれました。非常に古くなったディストリビューションの中には、まだGitバージョン1.7.xを使用しているものがあります。あなたがこのような古代ギルドを持っているなら、git fetch origin masterorigin/masterの更新に失敗します。

関連する問題