web-dev-qa-db-ja.com

git fetchの後でgit logに何も新しいものが表示されないのはなぜですか?

Pro Git Bookの関連セクション を読んで、Gitリモコンの操作について学びます。

リポジトリのクローンを作成すると、コマンドはそのリモートリポジトリを「Origin」という名前で自動的に追加します。そう、 git fetch Originクローンした(または最後にフェッチした)以降、そのサーバーにプッシュされた新しい作業をフェッチします。

git fetchコマンドのみローカルリポジトリにデータをフェッチします。自動的に作業内容とマージしたり、現在作業中の内容を変更したりすることはありません。準備ができたら、手動で作業にマージする必要があります。

これが私が試したものです。リポジトリのクローンを作成し、ファイルを編集しました。元のリポジトリでは、誰かが同じファイルを更新してプッシュしました。そして、

  1. 私は走ったgit fetch。更新の進捗メッセージが表示されました。しかしながら、 git logはその更新を表示しませんでした。私は何を誤解しましたかgit fetchしますか?何か不足していますか?

  2. 私は走ったgit pull、私は得た

エラー: 'hello_world.c'へのローカルの変更はマージによって上書きされます。中止します。マージする前に、変更をコミットするか、隠しておいてください。

ここでは、それもマージしていると思います。偶発的なデータ損失を回避するために中止します。

編集:回答ありがとうございます。実際に答えを見る前に、私は自分で試していて、次のコマンド/出力で同じことを実現しました:

$ git ls-remote Origin
d0006a6bfa95e0e90aa820a0e50d31a548625652    HEAD
d0006a6bfa95e0e90aa820a0e50d31a548625652    refs/heads/master
$ git ls-remote .
14375458b8a6b84f82d9fa4d2ded0bb8c9e87431    HEAD
14375458b8a6b84f82d9fa4d2ded0bb8c9e87431    refs/heads/master
d0006a6bfa95e0e90aa820a0e50d31a548625652    refs/remotes/Origin/HEAD
d0006a6bfa95e0e90aa820a0e50d31a548625652    refs/remotes/Origin/master

また、次のコマンドを使用します。

$git log Origin --oneline
$git log --oneline

私の愚かな質問に耐えてくれてありがとう;-)

16
Adil

デフォルトでは、git logは現在のブランチのログを表示します。マージせずにフェッチしても現在の(ローカル)ブランチの内容は変更されないため、git log出力は変更されません。

git log--allオプションを使用して、ローカルおよびリモートのすべてのブランチの履歴を表示できます。または、git log Origin/masterのようにリモートブランチを明示的にリストすることもできます。

17
user743382

あなたが書いた

ただし、gitログにはその更新が表示されませんでした。 git fetchが何をするのか私は誤解しましたか?何か不足していますか?

git loggit fetchの両方の機能について混乱しているようです。

masterと呼ばれるブランチが現在チェックアウトされているという前提の下で、分離されたHEAD状態である可能性もありますが、ここでは説明を簡単にするために、コマンドgit logその他の引数はgit log masterと同等です。このコマンドはGitに指示します

ローカルmasterブランチの祖先にあるすべてのコミットを表示します。

ただし、git fetch Originmasterなどのローカルブランチに影響を与えたり更新したりしないことを理解する必要があります。代わりに、Origin(または取得した他のリモート)からの新しいコミットが リモート追跡ブランチ

リモート追跡ブランチは特別なローカルブランチであり、その唯一の目的は、との最後の通信時にリモートリポジトリに存在するブランチの状態を反映することですサーバー。特に、このタイプのブランチにコミットすることはできません。

あなたがおそらく望んでいるのは実行することです

git fetch Origin

Originからすべての新しいコミットをフェッチし、リモートトラッキングブランチ(ここではOrigin/masterを含む)に配置し、次に

git log master..Origin/master

リモートmasterブランチ、つまりリモートトラッキングブランチであるOriginとして知られているリモートサーバー上にあるブランチに追加されたすべての「新しい」コミットのログを表示するOrigin/masterが追跡します。

6
jub0bs

git fetchの後、ローカルリポジトリはリモートリポジトリからの変更を認識していますが、まだローカルブランチに適用していません。

git logに追加のパラメータを指定しないと、現在のブランチのログが表示されます。リモートの変更をまだそのブランチにマージしていません。

git pullgit fetchおよびgit merge FETCH_HEADを実行します。

エラーメッセージは、ローカルリポジトリにコミットされていない変更があることを意味します。それらを(メッセージの状態として)コミットまたはスタッシュして、merge(またはpull)を再試行できます。

4
Melebius

ローカルブランチはフェッチから更新されることはなく、トラッキングブランチのみが更新します。一方、git pullは更新します。

git pull = git fetch + git merge

git logでは更新を確認できません。間違ったブランチで実行しているため、git fetchからの変更を確認するには、正しいブランチでgit logを実行する必要があります。あなたの場合はどちらでしょう

git log Origin/master
1