前の章では、GitHub を使ってリモートリポジトリを作成し、ローカルリポジトリと紐付ける方法を学びました。これで、いよいよリモートリポジトリを活用する準備が整いました。この章では、ローカルリポジトリとリモートリポジトリの間で変更をやり取りするための、基本的なコマンドをマスターしていきましょう。
1. リモートリポジトリに変更を送信(プッシュ)しよう (git push)
まずは、ローカルリポジトリの変更をリモートリポジトリに送信する、git push コマンドから見ていきましょう。git push を使えば、あなたのパソコンで行った作業を、世界中に公開したり、チームメンバーと共有したりできます。
ローカルリポジトリで変更をコミットします。
git pushする前に、まずはローカルリポジトリで変更をコミットしておく必要があります。bash# 変更をステージング git add . # コミットを作成 git commit -m "リモートリポジトリにプッシュする最初のコミット"git pushコマンドを実行して、変更をリモートリポジトリに送信します。bashgit push -u origin maingit 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 maingit 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/main2.2 コンフリクト発生!解決方法を学ぼう
git pull を実行した際に、コンフリクト(競合) が発生することがあります。コンフリクトとは、同じファイルの同じ部分を、複数の人が同時に変更した場合に発生する問題です。
例えば、あなたが README.md の1行目を編集し、同時に他の人も README.md の1行目を編集した場合、git pull を実行するとコンフリクトが発生します。
コンフリクトが発生すると、Git はどちらの変更を採用すれば良いのか判断できないため、あなたに判断を委ねます。
コンフリクトが発生した場合は、以下の手順で解決します。
コンフリクトが発生したファイルを開きます。 コンフリクトが発生したファイルを開くと、以下のように、競合する部分が特殊な記号でマークされています。
<<<<<<< HEAD あなたの変更内容 ======= 他の人の変更内容 >>>>>>> origin/main<<<<<<< HEADから=======までが、あなたの変更内容です。=======から>>>>>>> origin/mainまでが、他の人の変更内容です。
どちらの変更を採用するか、または両方を組み合わせて修正します。 コンフリクトを解決するには、どちらかの変更を採用するか、または両方の変更を組み合わせて、適切な状態に修正する必要があります。
コンフリクトを解決したファイルを保存します。
git addコマンドで、コンフリクトを解決したファイルをステージングします。bashgit add README.mdgit 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 originoriginはリモートリポジトリの名前です。
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.gitmy_remote_repo.gitは、作成するリモートリポジトリの名前です。慣例的に、ベアリポジトリの名前は.gitで終わります。
5.2 ローカルリポジトリからベアリポジトリへプッシュ
ベアリポジトリを作成したら、ローカルリポジトリからプッシュしてみましょう。
ローカルリポジトリのディレクトリに移動します。
git remote addコマンドで、ベアリポジトリをリモートリポジトリとして登録します。bashgit remote add local_remote /path/to/my_remote_repo.gitlocal_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.git5.4 使い所は?
「GitHubがあるのに、わざわざ自分でリモートリポジトリを立てる必要ある?」と思われるかもしれません。確かに、GitHubは非常に便利で高機能です。しかし、以下のような場合に、自分でリモートリポジトリを立てるメリットがあります。
- 完全にプライベートな環境で開発したい場合: ネットワークに接続していないクローズドな環境でも、複数人でGitを使って開発できます。
- GitHubが提供していない機能を使いたい場合: 独自要件で、特殊な運用をしたい場合などが考えられます。
- Gitの仕組みをより深く理解したい場合: 自分でリモートリポジトリを立てることで、Gitの内部構造への理解が深まります。