エンジニアライフスタイルブログを運営しているミウラ(@miumiu06171)です。
こんにちは、普段はフリーランスでシステムエンジニアをしております。
今回は、プログラミング初心者が入門時におさえておきたい必須スキル【Gitコマンド】と【GitHub】の使い方を紹介していきます。
Gitとは
Gitとは、世界で最も使われているバージョン管理システムです。
後述するGitHubという外部サイトも使うことで、バージョン管理しているソースコードやドキュメントを共有することができ、複数人での開発をスムーズに行えるようになります。
Gitの使い方
Gitでバージョン管理するとき、以下の3つのワークフローのステップを踏むので、まずは3ステップあることだけはおさえておきましょう。
・ファイルの変更をステージングエリア(控え室のようなもの)へ追加します
・ステージングエリアのファイルの変更をローカルリポジトリに記録します(コミット)
・ローカルリポジトリの記録をリモートリポジトリに反映します(プッシュ)
ワークフローを把握できたところで、Gitのインストールから使い方を順に説明していきます。
Gitインストール
Gitのインストールは、WindowsとLinuxで異なるため、それぞれみていきましょう。
Windowsの場合
Windowsの場合、こちらのサイトの「Download」ボタンからGit for Windowsをインストールしてください。
Linux(Ubuntu)の場合
WSLを使ってWindows上でLinux(Ubuntu)を動作させている方は、以下のapt-getコマンドでgitをインストールすることができます。
sudo apt-get install git |
Gitインストール確認
以下の「git –version」コマンドで、Gitのバージョン情報が返ってきたら、インストールはオッケーです。
git –version |
Git初期設定
次にGitを使うためには、ユーザとメールアドレスを初期設定する必要があるので、設定方法を紹介します。
Git用ユーザ名を登録する
Gitのユーザ名を登録するには、以下の「git config –global user.name」コマンドを実行します。
【コマンド書式】
git config –global user.name “任意のユーザ名” |
【コマンド例】
ユーザ名を「miura」としたときの例は、以下の通りです。
git config –global user.name “miura” |
Git用メールアドレスを登録する
Gitのユーザメールアドレスの登録するには、以下の「git config –global user.email」コマンドを実行します。
【コマンド書式】
git config –global user.email “任意のユーザメールアドレス” |
【コマンド例】
ユーザメールアドレスを「miura@sample.com」としたときの例は、以下の通りです。
git config –global user.email “miura@sample.com” |
ローカルリポジトリを作成する(git init)
ローカルリポジトリを作成するには、以下の「git init」コマンドを実行します。
git init |
「git init」コマンドを実行後、カレントディレクトリに「.git」フォルダができていたらオッケーです。
Windows PCをお使いの方で「.git」フォルダが確認できない方は、エクスプローラのメニューバー「表示」→「隠しファイル」にチェックを入れて再度確認してください。
ステージングエリアに更新内容を登録する(git add)
ステージングエリアに変更内容を登録するには、以下の「git add」コマンドを実行します。
【コマンド書式1】
指定したファイルをステージングエリアに登録するには、以下の「git add」コマンドを実行します。
git add ファイル名 |
【コマンド書式2】
カレントディレクトリにあるフォルダ、新規ファイル、変更ファイルすべてをステージングエリアに追加するには、以下の「git add .」コマンドを実行します。
git add . |
.(ドット)は、カレントディレクトリを指します。
ローカルリポジトリに更新内容を記録する(git commit)
ここでは、先程「git add」コマンドで登録した更新内容をローカルリポジトリに記録します。
ローカルリポジトリに記録するには、以下の「git commit」コマンドを実行します。
【コマンド書式】
git commit -m “メッセージ” |
【コマンド例】
git commit -m “最初のコミット” |
ローカルリポジトリのコミットログを確認する(git log)
先程の「git commit」コマンドでコミットした履歴を確認するには、「git log」コマンドを実行します。
【コマンド書式】
git log |
【コマンド実行例】
【コマンド実行例の解説】
「git log」コマンドを実行すると、以下の構成でコミットログが出力されます。
commit <コミットハッシュ値>
Author : <コミットしたユーザ> <コミットしたユーザのメールアドレス> Date : <コミットした日付情報> <空行> <コミットメッセージ> |
ここで登場する「コミットハッシュ値」は、コミットするごとに付与されるユニークな値で、Gitのバージョン管理において「誰が、いつコミットした時点なのか特定する値」であることをおぼえておいてください。
ユニークな値とは、「重複しない値」のことです。
そして、この「コミットハッシュ値」は、過去の特定のバージョンの状態に戻したい場合などに使用されます。
Gitのその他使い方
前章ではGitの基本的な使い方を紹介してきましたが、本章では必要に応じて使うGitコマンドを紹介していきます。
GitとGitHubの基本的な全体の流れを知りたい方は、本章はとばして次章へ進んでください。
特定のバージョンの状態にする(git checkout)
Gitで過去の特定のバージョンの状態に戻すには、以下の「git checkout」コマンドを実行します。
【コマンド書式】
git checkout <コミットハッシュ値> |
【コマンド解説】
下図は、A→B→Cという順に3つコミットがあったとき、「git checkout」コマンドでCからBの状態にするときを図式化したものです。
ここでおさえておきたいことは、「git checkout」コマンドでC地点からB地点の状態にしても、C地点のコミットログは残っていることです。
もちろん、C地点のコミットログが残っているので、再度BからCに戻ることも可能です。
特定のファイルを特定のバージョンの状態にする(git checkout)
Gitで特定のファイルを過去の特定のバージョンに戻すには、以下の「git checkout」コマンドを実行します。
【コマンド書式】
git checkout <コミットハッシュ値> <ファイル名> |
ここで指定する<ファイル名>は、ステージングエリアに追加前のファイルを指定する必要があります。
つまり、ステージングエリアにあげている状態のファイルを指定しても、特定のバージョンに戻すことはできません。
ステージングエリアにあげているファイルを特定のバージョンに戻したい場合は、次の「git reset」コマンドを実行してからコマンド実行してください。
ステージングエリアに移したファイルを元に戻す(git reset)
ステージングエリアに移したファイルを元に戻すには、以下の「git reset」コマンドを使用します。
【コマンド書式】
git reset <ステージングエリアに追加したファイル名> |
コミットログを削除して特定のバージョンの状態に戻す(ファイル変更内容は残る) (git reset)
コミットログを削除して特定のバージョンの状態に戻すには、以下の「git reset」コマンドを実行します。
【コマンド書式】
git reset <特定のバージョンのコミットハッシュ値> |
【コマンド解説】
下図は、A→B→Cという順に3つコミットがあったとき、「git reset」コマンドでCからBの状態に戻すときを図式化したものです。
ここでおさえておきたいことは、「git checkout」コマンドと異なり、「git reset」コマンドでC地点からB地点の状態に戻すと、C地点のコミットログは削除されて残っていないことです。
つまり、C地点のコミットログが残っていないので、C地点のコミットハッシュ値を使っても再度BからCには戻れません。
ただし、B地点からC点に向けて変更していたファイルの変更内容は残っていますので、再度「git add」「git commit」コマンドを実行することは可能です。
コミットログを削除して特定のバージョンの状態に戻す(ファイル変更内容も消去) (git reset –hard)
「git reset」コマンドの効果に加えて、ファイルの変更点も指定したバージョンに戻したい場合には、以下の「git reset –hard」コマンドを実行します。
【コマンド書式】
git reset –hard <特定のバージョンのコミットハッシュ値> |
【コマンド解説】
下図は、A→B→Cという順に3つコミットがあったとき、「git reset –hard」コマンドでCからBの状態に戻すときを図式化したものです。
ここでおさえておきたいことは、「git reset」コマンドと異なり、「git reset –hard」コマンドを実行すると、C地点に向けたファイルの変更点もリセットされてB地点の状態になっていることです。
つまり、C地点に向けたファイルの変更点の履歴も完全に失います。
これまでの説明でわかっていただけたと思いますが、「git reset」コマンドはコミットログが消えるとても危険なコマンドであるため、取り扱いには十分注意しましょう。
コミットログを残しつつ特定のバージョンの状態に戻す(git revert)
コミットログを残しつつ特定のバージョンの状態に戻すには、以下の「git revert」コマンドを実行します。
revertとは、「戻る」という意味があります。
【コマンド書式】
git revert <コミットハッシュ値> |
「git reset」コマンドと同様にコミットハッシュ値を使ってファイル内容を元に戻せるgitコマンドです。
【コマンド解説】
「git reset」コマンドでは、指定したコミットハッシュ以降のコミットログが削除されていました。
一方、「git revert」コマンドでは、指定したバージョンの変更内容を反転したものをコミットします。
変更内容を反転とは、「ファイルを新規作成」であれば「新規作成したファイルを削除」、「コードを修正」であれば「修正前のコードに戻す」というような意味です。
下図は、A→B→Cという順に3つコミットがあったとき、「git revert C地点」コマンドでCからBの状態に戻すときを図式化したものです。
次は、さらにDで「git revert D地点」コマンドを実行し、DからCに戻すときを図式化したものになります。
これで「git revert」コマンドが指定したバージョンの変更内容を反転するコマンドだとご理解いただけたかと思います。
ただし、「git revert」コマンドでは、D→Aのように複数バージョン前の状態に一気に戻ることはできません。
D→Aに戻したい場合は、D→C→B→Aの順で1つずつ戻す必要があります。
GitHubと連携する方法
ここでは、GitのローカルリポジトリとGitHubのリモートリポジトリを連携する方法を紹介します。
GitHubのアカウント作成
まずは、こちらのサイトを参考にGitHubアカウントを作成しましょう。
GitHubにリモートリポジトリ作成
GitHubのアカウント作成が完了したら、リモートリポジトリを作成します。
GitHubでリモートリポジトリを作成するには、まずはGitHubにログインしましょう。
ログイン後、下図のようにログインアイコンの左の+メニューをクリックし、「New repository」をクリックしてください。
すると、下図のようにリモートリポジトリを作成する画面になるので、「Repository name」欄にリモートリポジトリ名、「Public/Private」を選択し、「Create repository」ボタンを押しましょう。
左上のGitHubホームボタンを押すと、左メニューに自分が作成したリモートリポジトリ一覧が表示されるので、ここに先程作成したリモートリポジトリがあることを確認してください。
GitHubのリモートリポジトリと連携する(git remote add)
GitHubでリモートリポジトリが作成できたら、GitHubのリモートリポジトリとGitのローカルリポジトリを連携してきましょう。
連携するには、まずGitHubのリモートリポジトリのURLを把握する必要があります。
リモートリポジトリのURLは、リモートリポジトリのリンクへ遷移し、下図のように「Code」ボタンをクリックすると、HTTPSで始まるリモートリポジトリのURLを確認することができます。
GitHubのリモートリポジトリのURLが確認できたら、以下の「git remote add」コマンドを実行すると、「origin」という名前でリモートリポジトリと連携することができます。
【コマンド書式】
git remote add origin “リモートリポジトリのURL” |
【コマンド例】
git remote add origin https://github.com/miura0617/samplegit.git |
GitHubのリモートリポジトリと連携したことを確認(git remote -v)
「git remote add」コマンドでGitHubのどのリモートリポジトリと連携しているか確認したい場合は、「git remote -v」コマンドで確認することができます。
【コマンド書式】
git remote -v |
【コマンド実行例】
下図は、「git remote -v」コマンドで「origin」がリモートリポジトリ「https://github.com/miura0617/samplegit.git」を指しており、リモートリポジトリと連携していることが確認できた例になります。
GitHubのリモートリポジトリに反映する(git push)
ローカルリポジトリのコミット内容をGitHubのリモートリポジトリに反映するには、以下の「git push」コマンドを実行します。
【コマンド書式】
git push -u origin master |
GitHubのリモートリポジトリの内容をクローンする(git clone)
開発に新たに加わった開発者BがGibHub上のリモートリポジトリの内容一式を、ローカルPCに初めて持ってきたい場合、以下の「git clone」コマンドを実行します。
【コマンド書式】
git clone “リモートリポジトリのURL” |
【コマンド例】
git clone https://github.com/miura0617/samplegit.git |
GitHubのリモートリポジトリの最新内容をプルする(git pull)
GitHubのリモートリポジトリの最新内容一式を、ローカルPCに初めて持ってきたい場合、以下の「git pull」コマンドを実行します。
【コマンド書式】
git pull |
「git clone」コマンドは初めてローカルPCにコピーしてくる場合に使うため、コピー元であるリモートリポジトリのURLを指定しているのに対して、「git pull」コマンドは現在ローカルPCで扱っているファイル群と紐付いたリモートリポジトリの最新内容を、ローカルPCにコピーしてくるというコマンドになります。
よって、一度「git clone」コマンドでコピーした環境は、それ以降必要に応じて「git pull」コマンドで最新内容にしてローカルPCで開発を進めていきます。
まとめ
いかがでしたでしょうか。
開発の現場で「Gitを使わないことがない」というぐらいGitは必須スキルです。
本記事でGitの基本的な使い方がわかったら、次はGitブランチについて学ぶとよいでしょう。
【必須スキル】Gitコマンドでブランチ(branch)を操作する基本的な使い方
是非この機会にGitブランチもマスターして、複数人での開発案件もスムーズに進められるようにしましょう。
【関連記事】
【必須スキル】Gitコマンドでブランチ(branch)を操作する基本的な使い方
【TIPS】複数GitHubアカウントを使い分ける設定方法と動作確認