Git リポジトリがリモートと同期しているかどうかを確認する方法

GitGitBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、ローカルの Git リポジトリがリモートのリポジトリと最新の状態で一致しているかどうかを確認する方法を学びます。これを達成するための必須の手順を説明します。まずは、ローカルの作業を変更せずにリモートリポジトリから最新の変更を取得する方法から始めます。

フェッチ操作の後、ローカルブランチとリモートブランチを比較して差分を特定する方法を学びます。最後に、git log コマンドを使用して、ローカルのコミットがリモートリポジトリと同期していることを視覚的に確認し、プロジェクトの最新バージョンを持っていることを保証する方法を探ります。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git(("Git")) -.-> git/CollaborationandSharingGroup(["Collaboration and Sharing"]) git/BasicOperationsGroup -.-> git/status("Check Status") git/BranchManagementGroup -.-> git/log("Show Commits") git/CollaborationandSharingGroup -.-> git/fetch("Download Updates") git/CollaborationandSharingGroup -.-> git/pull("Update & Merge") git/CollaborationandSharingGroup -.-> git/remote("Manage Remotes") subgraph Lab Skills git/status -.-> lab-560101{{"Git リポジトリがリモートと同期しているかどうかを確認する方法"}} git/log -.-> lab-560101{{"Git リポジトリがリモートと同期しているかどうかを確認する方法"}} git/fetch -.-> lab-560101{{"Git リポジトリがリモートと同期しているかどうかを確認する方法"}} git/pull -.-> lab-560101{{"Git リポジトリがリモートと同期しているかどうかを確認する方法"}} git/remote -.-> lab-560101{{"Git リポジトリがリモートと同期しているかどうかを確認する方法"}} end

git fetch でリモートの変更を取得する

このステップでは、リモートの Git リポジトリから変更を取得する方法を学びます。他の人と一緒にプロジェクトを進めていて、彼らが何らかの更新を行ったと想像してみてください。git fetch は、自分の作業を変更せずにそれらの更新を取得するために使用するコマンドです。

まず、リモートリポジトリを持っている状況をシミュレートしましょう。既存のローカルリポジトリにリモート URL を追加することでこれを行います。実際のシナリオでは、これは GitHub や GitLab のようなプラットフォームにホストされているリポジトリの URL になります。

まだプロジェクトディレクトリにいない場合は、そこに移動します。

cd ~/project/my-time-machine

次に、ダミーのリモート URL を追加しましょう。このリモートを origin と呼びます。これは一般的な慣例です。

git remote add origin https://github.com/example/my-time-machine.git

このコマンドは何も出力しませんが、ローカルリポジトリが origin という名前のリモートリポジトリを認識するように設定されます。

では、git fetch を使用して、リモートリポジトリの変更に関する情報を取得しましょう。これはダミー URL なので、git fetch は実際にはコードをダウンロードしませんが、そのプロセスをシミュレートし、何をするかを表示します。

git fetch origin

次のような出力が表示されることがあります(正確な出力は Git のバージョンと設定によって異なります)。

fatal: repository 'https://github.com/example/my-time-machine.git/' not found

「リポジトリが見つかりません」というエラーは心配しないでください。これはダミー URL を使用したために予想される結果です。重要なのは、git fetch コマンドを実行したことです。

実際のシナリオでは、git fetch origin はリモートリポジトリに接続し、ローカルリポジトリに存在しないすべての新しいコミットとブランチをダウンロードし、特別な領域に保存します。これらの変更は現在の作業ブランチにマージされません。これにより、他の人が行った変更を自分の作業に統合する前に確認することができます。

git fetch を郵便局に行って郵便物を受け取ることに例えてみてください。あなたは郵便物(変更)を受け取りますが、準備ができるまでそれを開いて机の上に置く(自分の作業にマージする)ことはしません。

git status でローカルとリモートを比較する

このステップでは、フェッチ後に git status コマンドを使用して、ローカルリポジトリとリモートリポジトリを比較する方法を学びます。

まだプロジェクトディレクトリにいない場合は、そこに移動します。

cd ~/project/my-time-machine

次に、git status コマンドを実行します。

git status

次のような出力が表示されるはずです。

On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

この出力を分解してみましょう。

  • "On branch master": 現在 master ブランチにいることを示します。
  • "Your branch is up to date with 'origin/master'": これが重要な部分です。ローカルの master ブランチが origin リモートの master ブランチと同じコミットを持っていることを示しています。

前のステップで git fetch コマンドがエラーになったのは、リモート URL がダミーだったためですが、Git は内部の追跡情報を更新しました。実際のシナリオで git fetch が新しいコミットを正常に取得した場合、git status の出力は、ローカルブランチがリモートブランチよりも古いことを示し、変更を統合するために git pull を実行するように提案します。

git status コマンドは、リポジトリの状態を確認するための窓口です。どのブランチにいるか、ローカルブランチがリモートブランチと同期しているかどうか、作業ディレクトリまたはステージングエリアに未コミットの変更があるかどうかを教えてくれます。定期的に git status を確認することは、プロジェクトの状態を把握するための良い習慣です。

git log を使って同期されたコミットを確認する

このステップでは、git log コマンドを使ってコミット履歴を確認し、git fetch が表示内容にどのような影響を与えるかを理解します。

まだプロジェクトディレクトリにいない場合は、そこに移動します。

cd ~/project/my-time-machine

コミット履歴を表示するために git log コマンドを実行します。

git log

前の実験で行ったコミットが表示されるはずです。

commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 (HEAD -> master, origin/master)
Author: Jane Doe <[email protected]>
Date:   Mon Aug 7 10:00:00 2023 +0000

    Send a message to the future

出力に (HEAD -> master, origin/master) と表示されていることに注意してください。これは、ローカルの master ブランチ (HEAD -> master) と origin/master のリモート追跡ブランチ (origin/master) が同じコミットを指していることを示しています。これにより、ローカルリポジトリがリモートと同期している(少なくとも git fetch コマンド実行後に Git が持っているリモートに関する情報とは同期している)ことが確認できます。

実際のシナリオで git fetch がリモートから新しいコミットを取得した場合、git log を実行するとそれらの新しいコミットが表示されます。それらはログ履歴に表示され、origin/master ポインタはリモートの最新のコミットを指し、ローカルの master ブランチは最後のローカルコミットのままになります。ログのこの視覚的な違いにより、マージする前にリモートから利用可能な変更を正確に把握することができます。

git log コマンドは、プロジェクトの履歴を理解するために不可欠です。コミットの順序、誰が行ったか、いつ行われたか、コミットメッセージを確認することができます。git fetch と組み合わせることで、ローカルの履歴とリモートリポジトリの履歴の違いを視覚化するのに役立ちます。

ログビューを終了するには q を押します。

まとめ

この実験では、ローカルの Git リポジトリがリモートリポジトリと同期しているかどうかを確認する方法を学びました。まず、ローカルの作業コピーを変更せずにリモートから変更を取得する git fetch の目的を理解しました。次に、リモートを追加するシミュレーションを行い、git fetch を実行して、リモートリポジトリとのやり取りを確認しました。

提供された内容では詳細が記載されていない後続のステップでは、通常、git status を使用してローカルブランチとフェッチしたリモートブランチを比較し、git log を使用してコミット履歴を視覚的に調べて差分を特定し、ローカルリポジトリがリモートと同期しているかどうかを確認します。