Skip to content

リモートリポジトリとの連携をマスター!

公開日:December 14, 2024更新日:December 15, 2024
Git📄

前の章では、GitHub を使ってリモートリポジトリを作成し、ローカルリポジトリと紐付ける方法を学びました。これで、いよいよリモートリポジトリを活用する準備が整いました。この章では、ローカルリポジトリとリモートリポジトリの間で変更をやり取りするための、基本的なコマンドをマスターしていきましょう。

1. リモートリポジトリに変更を送信(プッシュ)しよう (git push)

まずは、ローカルリポジトリの変更をリモートリポジトリに送信する、git push コマンドから見ていきましょう。git push を使えば、あなたのパソコンで行った作業を、世界中に公開したり、チームメンバーと共有したりできます。

  1. ローカルリポジトリで変更をコミットします。git push する前に、まずはローカルリポジトリで変更をコミットしておく必要があります。

    bash
    # 変更をステージング
    git add .
    
    # コミットを作成
    git commit -m "リモートリポジトリにプッシュする最初のコミット"
  2. git push コマンドを実行して、変更をリモートリポジトリに送信します。

    bash
    git push -u origin main
    • git push は、ローカルリポジトリの変更をリモートリポジトリに送信するコマンドです。
    • -u は、--set-upstream の省略形で、次回から単に git push だけでプッシュできるように、追跡ブランチを設定するオプションです。
    • origin は、リモートリポジトリの名前です。(2.4 で設定しましたね!)
    • main は、プッシュするローカルブランチの名前です。GitHub では、デフォルトのブランチ名が main になっています。(以前は master でした)

1.1 git push -u origin main って何?

初めて git push を実行するときは、-u origin main というオプションを付ける必要があります。これは、ローカルの main ブランチを、origin という名前のリモートリポジトリの main ブランチに紐付けるためのものです。

この紐付けを行うことで、次回からは単に git push と入力するだけで、ローカルの main ブランチの変更を、リモートの main ブランチにプッシュできるようになります。

1.2 初めてのプッシュ:ドキドキを乗り越えよう!

初めてのプッシュは、誰でも少し緊張するものです。「本当にこれで大丈夫かな?」「間違って変なデータを送ってしまったらどうしよう...」と不安になるかもしれません。

でも、大丈夫!git push は、ローカルリポジトリでコミットした変更だけを送信します。コミットしていない変更は送信されませんし、他のブランチの内容も送信されません。

もし、間違ってプッシュしてしまったとしても、後から修正できます。Git には、過去の変更を取り消したり、修正したりするための、様々なコマンドが用意されています。(詳しくは、前回の「Git 超入門」の「2.5 間違えた!変更を元に戻したい!」や「3.2 コミットをまとめよう(git rebase -i)」、「3.3 間違ったコミットを直前のコミットとまとめたい!(git commit --amend)」を参照してください!)

最初は誰でも初心者です。失敗を恐れずに、どんどん git push してみましょう!

2. リモートリポジトリの変更を取得(プル)しよう (git pull)

次に、リモートリポジトリの変更をローカルリポジトリに取得する、git pull コマンドについて見ていきましょう。git pull を使えば、他の人が行った変更を自分の作業環境に取り込んだり、最新の状態に同期したりできます。

  1. git pull コマンドを実行して、リモートリポジトリの変更を取得します。

    bash
    git pull origin main
    • git pull は、リモートリポジトリの変更を取得して、ローカルブランチにマージするコマンドです。
    • origin は、リモートリポジトリの名前です。
    • main は、取得するリモートブランチの名前です。

2.1 git fetchgit merge の合わせ技!

実は、git pull は、内部的には git fetchgit merge という2つのコマンドを組み合わせて実行しています。

  • git fetch は、リモートリポジトリの変更を取得するコマンドです。ただし、git fetch だけでは、ローカルブランチには変更が反映されません。
  • git merge は、git fetch で取得した変更を、現在のローカルブランチにマージするコマンドです。

つまり、git pull origin main は、以下のコマンドを順番に実行するのと同じ意味になります。

bash
git fetch origin main
git merge origin/main

2.2 コンフリクト発生!解決方法を学ぼう

git pull を実行した際に、コンフリクト(競合) が発生することがあります。コンフリクトとは、同じファイルの同じ部分を、複数の人が同時に変更した場合に発生する問題です。

例えば、あなたが README.md の1行目を編集し、同時に他の人も README.md の1行目を編集した場合、git pull を実行するとコンフリクトが発生します。

コンフリクトが発生すると、Git はどちらの変更を採用すれば良いのか判断できないため、あなたに判断を委ねます。

コンフリクトが発生した場合は、以下の手順で解決します。

  1. コンフリクトが発生したファイルを開きます。 コンフリクトが発生したファイルを開くと、以下のように、競合する部分が特殊な記号でマークされています。

    <<<<<<< HEAD
    あなたの変更内容
    =======
    他の人の変更内容
    >>>>>>> origin/main
    • <<<<<<< HEAD から ======= までが、あなたの変更内容です。
    • ======= から >>>>>>> origin/main までが、他の人の変更内容です。
  2. どちらの変更を採用するか、または両方を組み合わせて修正します。 コンフリクトを解決するには、どちらかの変更を採用するか、または両方の変更を組み合わせて、適切な状態に修正する必要があります。

  3. コンフリクトを解決したファイルを保存します。

  4. git add コマンドで、コンフリクトを解決したファイルをステージングします。

    bash
    git add README.md
  5. git commit コマンドで、コンフリクトを解決したことをコミットします。

    bash
    git commit -m "README.mdのコンフリクトを解決"

これで、コンフリクトの解決は完了です!

3. 他のリポジトリを複製(クローン)しよう (git clone)

git clone コマンドを使えば、リモートリポジトリ全体をローカル環境に複製できます。これは、他の人のプロジェクトに参加したり、オープンソースプロジェクトに貢献したりする際に、よく使われる方法です。

  1. GitHub などのウェブサイトで、クローンしたいリポジトリの URL をコピーします。 リポジトリのページにアクセスし、「Code」ボタンをクリックして、リポジトリの URL をコピーします。HTTPS または SSH の URL を選択できますが、ここでは SSH URL を使うことをお勧めします。(2.2 で SSH キーの設定を行いましたね!) [画像:GitHubのリポジトリURLコピー画面]

  2. ターミナル(または Git Bash)で、リポジトリをクローンしたいディレクトリに移動します。

  3. git clone コマンドを実行して、リモートリポジトリをクローンします。

    bash
    git clone <コピーしたリポジトリのURL>
    • git clone は、リモートリポジトリをローカルに複製するコマンドです。
    • <コピーしたリポジトリのURL> の部分に、先ほどコピーしたリポジトリの URL を貼り付けてください。

3.1 オープンソースの世界へ飛び込もう!

git clone は、オープンソースプロジェクトに参加する際の第一歩です。GitHub には、数え切れないほどのオープンソースプロジェクトが存在し、誰でも自由に参加できます。

興味のあるプロジェクトを見つけたら、まずは git clone でリポジトリをローカルに複製しましょう。そして、コードを読んだり、バグを修正したり、新しい機能を追加したりして、プロジェクトに貢献してみましょう!

オープンソースプロジェクトへの貢献は、あなたのスキルアップに繋がるだけでなく、世界中の開発者との繋がりを生み出し、あなたのキャリアを大きく広げる可能性を秘めています。

3.2 git clonegit init + git remote add + git pull なんだ!

git clone は、実は以下の3つのコマンドを順番に実行するのと同じです。

  1. git init:新しい空のリポジトリを作成する
  2. git remote add origin <リモートリポジトリのURL>:リモートリポジトリを origin として追加する
  3. git pull origin main:リモートリポジトリの main ブランチをローカルに取得してマージする

つまり、git clone を実行するだけで、リモートリポジトリをローカルで利用する準備がすべて整うというわけです!

4. リモートリポジトリの情報を確認しよう (git remote, git branch -r)

git remotegit branch -r コマンドを使えば、リモートリポジトリに関する情報を確認できます。

4.1 リモートリポジトリを詳しく知ろう!

git remote コマンドは、登録されているリモートリポジトリの一覧を表示します。

bash
git remote -v
  • -v オプションを付けると、リモートリポジトリの URL も一緒に表示されます。

4.2 git fetch で最新情報を確認!

git fetch コマンドは、リモートリポジトリの最新情報を取得しますが、ローカルブランチは更新しません。

bash
git fetch origin
  • origin はリモートリポジトリの名前です。

git fetch を実行した後、git branch -r コマンドを実行すると、リモートリポジトリのブランチ一覧を確認できます。

bash
git branch -r
  • -r オプションは、リモート追跡ブランチを表示するオプションです。

これらのコマンドを組み合わせることで、リモートリポジトリの最新状況を把握できます。

5 ローカル環境でリモートリポジトリを立てる (git init --bare)

GitHub などの Git ホスティングサービスを利用する以外にも、自分のパソコンやサーバーにリモートリポジトリを作成する方法があります。ここでは、git init --bare コマンドを使って、ローカル環境にリモートリポジトリを作成する方法を解説します。

5.1 git init --bare でリモートリポジトリ専用のディレクトリを作成

git init --bare コマンドは、作業ディレクトリを持たない、リモートリポジトリ専用の Git リポジトリ(ベアリポジトリ)を作成します。

  1. リモートリポジトリを作成したいディレクトリに移動します。

  2. git init --bare コマンドを実行します。

    bash
    git init --bare my_remote_repo.git
    • my_remote_repo.git は、作成するリモートリポジトリの名前です。慣例的に、ベアリポジトリの名前は .git で終わります。

5.2 ローカルリポジトリからベアリポジトリへプッシュ

ベアリポジトリを作成したら、ローカルリポジトリからプッシュしてみましょう。

  1. ローカルリポジトリのディレクトリに移動します。

  2. git remote add コマンドで、ベアリポジトリをリモートリポジトリとして登録します。

    bash
    git remote add local_remote /path/to/my_remote_repo.git
    • local_remote は、リモートリポジトリの名前です。(origin 以外にも、好きな名前を付けられます)
    • /path/to/my_remote_repo.git は、ベアリポジトリのパスに置き換えてください。
  3. git push コマンドで、ローカルリポジトリの変更をベアリポジトリにプッシュします。

    bash
    git push -u local_remote main

これで、ローカル環境に作成したリモートリポジトリに、変更をプッシュできました!

5.3 ベアリポジトリからクローン

他の開発者は、git clone コマンドを使って、ベアリポジトリからリポジトリをクローンできます。

bash
git clone /path/to/my_remote_repo.git

5.4 使い所は?

「GitHubがあるのに、わざわざ自分でリモートリポジトリを立てる必要ある?」と思われるかもしれません。確かに、GitHubは非常に便利で高機能です。しかし、以下のような場合に、自分でリモートリポジトリを立てるメリットがあります。

  • 完全にプライベートな環境で開発したい場合: ネットワークに接続していないクローズドな環境でも、複数人でGitを使って開発できます。
  • GitHubが提供していない機能を使いたい場合: 独自要件で、特殊な運用をしたい場合などが考えられます。
  • Gitの仕組みをより深く理解したい場合: 自分でリモートリポジトリを立てることで、Gitの内部構造への理解が深まります。