前の章では、GitHub を使ってリモートリポジトリを作成し、ローカルリポジトリと紐付ける方法を学びました。これで、いよいよリモートリポジトリを活用する準備が整いました。この章では、ローカルリポジトリとリモートリポジトリの間で変更をやり取りするための、基本的なコマンドをマスターしていきましょう。
1. リモートリポジトリに変更を送信(プッシュ)しよう (git push
)
まずは、ローカルリポジトリの変更をリモートリポジトリに送信する、git push
コマンドから見ていきましょう。git push
を使えば、あなたのパソコンで行った作業を、世界中に公開したり、チームメンバーと共有したりできます。
ローカルリポジトリで変更をコミットします。
git push
する前に、まずはローカルリポジトリで変更をコミットしておく必要があります。bash# 変更をステージング git add . # コミットを作成 git commit -m "リモートリポジトリにプッシュする最初のコミット"
git push
コマンドを実行して、変更をリモートリポジトリに送信します。bashgit 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
を使えば、他の人が行った変更を自分の作業環境に取り込んだり、最新の状態に同期したりできます。
git pull
コマンドを実行して、リモートリポジトリの変更を取得します。bashgit pull origin main
git pull
は、リモートリポジトリの変更を取得して、ローカルブランチにマージするコマンドです。origin
は、リモートリポジトリの名前です。main
は、取得するリモートブランチの名前です。
2.1 git fetch
と git merge
の合わせ技!
実は、git pull
は、内部的には git fetch
と git 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 はどちらの変更を採用すれば良いのか判断できないため、あなたに判断を委ねます。
コンフリクトが発生した場合は、以下の手順で解決します。
コンフリクトが発生したファイルを開きます。 コンフリクトが発生したファイルを開くと、以下のように、競合する部分が特殊な記号でマークされています。
<<<<<<< HEAD あなたの変更内容 ======= 他の人の変更内容 >>>>>>> origin/main
<<<<<<< HEAD
から=======
までが、あなたの変更内容です。=======
から>>>>>>> origin/main
までが、他の人の変更内容です。
どちらの変更を採用するか、または両方を組み合わせて修正します。 コンフリクトを解決するには、どちらかの変更を採用するか、または両方の変更を組み合わせて、適切な状態に修正する必要があります。
コンフリクトを解決したファイルを保存します。
git add
コマンドで、コンフリクトを解決したファイルをステージングします。bashgit add README.md
git commit
コマンドで、コンフリクトを解決したことをコミットします。bashgit commit -m "README.mdのコンフリクトを解決"
これで、コンフリクトの解決は完了です!
3. 他のリポジトリを複製(クローン)しよう (git clone
)
git clone
コマンドを使えば、リモートリポジトリ全体をローカル環境に複製できます。これは、他の人のプロジェクトに参加したり、オープンソースプロジェクトに貢献したりする際に、よく使われる方法です。
GitHub などのウェブサイトで、クローンしたいリポジトリの URL をコピーします。 リポジトリのページにアクセスし、「Code」ボタンをクリックして、リポジトリの URL をコピーします。HTTPS または SSH の URL を選択できますが、ここでは SSH URL を使うことをお勧めします。(2.2 で SSH キーの設定を行いましたね!) [画像:GitHubのリポジトリURLコピー画面]
ターミナル(または Git Bash)で、リポジトリをクローンしたいディレクトリに移動します。
git clone
コマンドを実行して、リモートリポジトリをクローンします。bashgit clone <コピーしたリポジトリのURL>
git clone
は、リモートリポジトリをローカルに複製するコマンドです。<コピーしたリポジトリのURL>
の部分に、先ほどコピーしたリポジトリの URL を貼り付けてください。
3.1 オープンソースの世界へ飛び込もう!
git clone
は、オープンソースプロジェクトに参加する際の第一歩です。GitHub には、数え切れないほどのオープンソースプロジェクトが存在し、誰でも自由に参加できます。
興味のあるプロジェクトを見つけたら、まずは git clone
でリポジトリをローカルに複製しましょう。そして、コードを読んだり、バグを修正したり、新しい機能を追加したりして、プロジェクトに貢献してみましょう!
オープンソースプロジェクトへの貢献は、あなたのスキルアップに繋がるだけでなく、世界中の開発者との繋がりを生み出し、あなたのキャリアを大きく広げる可能性を秘めています。
3.2 git clone
は git init
+ git remote add
+ git pull
なんだ!
git clone
は、実は以下の3つのコマンドを順番に実行するのと同じです。
git init
:新しい空のリポジトリを作成するgit remote add origin <リモートリポジトリのURL>
:リモートリポジトリをorigin
として追加するgit pull origin main
:リモートリポジトリのmain
ブランチをローカルに取得してマージする
つまり、git clone
を実行するだけで、リモートリポジトリをローカルで利用する準備がすべて整うというわけです!
4. リモートリポジトリの情報を確認しよう (git remote
, git branch -r
)
git remote
と git 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 リポジトリ(ベアリポジトリ)を作成します。
リモートリポジトリを作成したいディレクトリに移動します。
git init --bare
コマンドを実行します。bashgit init --bare my_remote_repo.git
my_remote_repo.git
は、作成するリモートリポジトリの名前です。慣例的に、ベアリポジトリの名前は.git
で終わります。
5.2 ローカルリポジトリからベアリポジトリへプッシュ
ベアリポジトリを作成したら、ローカルリポジトリからプッシュしてみましょう。
ローカルリポジトリのディレクトリに移動します。
git remote add
コマンドで、ベアリポジトリをリモートリポジトリとして登録します。bashgit remote add local_remote /path/to/my_remote_repo.git
local_remote
は、リモートリポジトリの名前です。(origin
以外にも、好きな名前を付けられます)/path/to/my_remote_repo.git
は、ベアリポジトリのパスに置き換えてください。
git push
コマンドで、ローカルリポジトリの変更をベアリポジトリにプッシュします。bashgit 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の内部構造への理解が深まります。