Pro Git Bookの関連セクション を読んで、Gitリモコンの操作について学びます。
リポジトリのクローンを作成すると、コマンドはそのリモートリポジトリを「Origin」という名前で自動的に追加します。そう、 git fetch Origin
クローンした(または最後にフェッチした)以降、そのサーバーにプッシュされた新しい作業をフェッチします。
git fetch
コマンドのみローカルリポジトリにデータをフェッチします。自動的に作業内容とマージしたり、現在作業中の内容を変更したりすることはありません。準備ができたら、手動で作業にマージする必要があります。
これが私が試したものです。リポジトリのクローンを作成し、ファイルを編集しました。元のリポジトリでは、誰かが同じファイルを更新してプッシュしました。そして、
私は走ったgit fetch
。更新の進捗メッセージが表示されました。しかしながら、 git log
はその更新を表示しませんでした。私は何を誤解しましたかgit fetch
しますか?何か不足していますか?
私は走った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
私の愚かな質問に耐えてくれてありがとう;-)
デフォルトでは、git log
は現在のブランチのログを表示します。マージせずにフェッチしても現在の(ローカル)ブランチの内容は変更されないため、git log
出力は変更されません。
git log
は--all
オプションを使用して、ローカルおよびリモートのすべてのブランチの履歴を表示できます。または、git log Origin/master
のようにリモートブランチを明示的にリストすることもできます。
あなたが書いた
ただし、gitログにはその更新が表示されませんでした。 git fetchが何をするのか私は誤解しましたか?何か不足していますか?
git log
とgit fetch
の両方の機能について混乱しているようです。
master
と呼ばれるブランチが現在チェックアウトされているという前提の下で、分離されたHEAD状態である可能性もありますが、ここでは説明を簡単にするために、コマンドgit log
その他の引数はgit log master
と同等です。このコマンドはGitに指示します
ローカル
master
ブランチの祖先にあるすべてのコミットを表示します。
ただし、git fetch Origin
はmaster
などのローカルブランチに影響を与えたり更新したりしないことを理解する必要があります。代わりに、Origin
(または取得した他のリモート)からの新しいコミットが リモート追跡ブランチ 。
リモート追跡ブランチは特別なローカルブランチであり、その唯一の目的は、との最後の通信時にリモートリポジトリに存在するブランチの状態を反映することですサーバー。特に、このタイプのブランチにコミットすることはできません。
あなたがおそらく望んでいるのは実行することです
git fetch Origin
Origin
からすべての新しいコミットをフェッチし、リモートトラッキングブランチ(ここではOrigin/master
を含む)に配置し、次に
git log master..Origin/master
リモートmaster
ブランチ、つまりリモートトラッキングブランチであるOrigin
として知られているリモートサーバー上にあるブランチに追加されたすべての「新しい」コミットのログを表示するOrigin/master
が追跡します。
git fetch
の後、ローカルリポジトリはリモートリポジトリからの変更を認識していますが、まだローカルブランチに適用していません。
git log
に追加のパラメータを指定しないと、現在のブランチのログが表示されます。リモートの変更をまだそのブランチにマージしていません。
git pull
はgit fetch
およびgit merge FETCH_HEAD
を実行します。
エラーメッセージは、ローカルリポジトリにコミットされていない変更があることを意味します。それらを(メッセージの状態として)コミットまたはスタッシュして、merge
(またはpull
)を再試行できます。
ローカルブランチはフェッチから更新されることはなく、トラッキングブランチのみが更新します。一方、git pull
は更新します。
git pull
= git fetch
+ git merge
git log
では更新を確認できません。間違ったブランチで実行しているため、git fetch
からの変更を確認するには、正しいブランチでgit log
を実行する必要があります。あなたの場合はどちらでしょう
git log Origin/master