GitHubの使い方とは?覚えておきたいコマンドを一挙ご紹介!
公開日:2019.09.04
スキルアップIT業界だけでなく、パソコンを使って仕事をする人であれば「GitHub(ギットハブ)」という言葉を聞いたことがあるのではないでしょうか?今回は、GitHubの使い方、覚えておきたいコマンドについて解説していきます。
GitHubを使い始める前に知っておきたい知識
GitHubとは、Gitの仕組みを利用して画像やプログラムコードを保存したり公開したりすることができ、プログラム開発者だけでなく、Webデザイナーやライターも利用しているWebサービスです。
GitHubでは、ソースコードの改変や再配布が自由に認められている無償ソフトウェアのOSS(オープンソースソフトウェア)が多数公開されており、さまざまな分野のIT・エンジニアが、公開されたOSSのプロジェクトに参加しています。
コミット
コミット(commit)は、ファイルの追加や変更履歴をリポジトリに保存することで、作業ミスやコードを間違って削除した場合に復元することができる仕組みです。ここで担当者がコメントを書いておくこともできるため、修正や変更箇所の把握も容易です。
ブランチ
ブランチ(branch)は、変更履歴を分けて記録するための仕組みで、複数の作業を同時並行して進める場合に使います。コマンドを使うことで、複数のブランチ間の作業をまとめて更新することもできます。これにより最新のバージョン情報を取り込むことができます。コマンドについては後述します。
ローカルリポジトリ
自分のパソコン内でプログラムコードや画像を保存するためのデータベースです。主に個人の作業で利用し、変更履歴なども手元で管理します。基本的には、ローカルリポジトリ(Local repository)で行った作業結果を、リモートリポジトリにアップロードする形で作業を進める仕組みです。
リモートリポジトリ
GitHubのサーバー上にプログラムコードや画像を保存するデータベースです。ローカルリポジトリからプログラムコードや画像データをPush(アップロード)して更新する仕組みです。作業を行う場合は、リモートリポジトリ(Remote repository)からクローンを作成(複製)してローカルリポジトリに落とし込みます。
自分で書いたソースコードや画像データも保存しておけるので、リモートリポジトリに保存することで、自分のポートフォリオとして利用することが可能です。
また、GitHubを使い始める前に必要な作業には次のものがあります。
アカウントの作成・登録方法
GitHubは、アカウントを登録することで利用できます。登録自体は簡単で、GitHubの公式サイトにアクセスして必要情報(赤枠の「Username」、「Email address」、「Password」)を入力し「Create an account」をクリックします。
無料で利用する場合は、フリープラン「Unlimited public repositories for free.」にチェックを入れ、「Continue」をクリックします。
続いて「Submit」をクリックすると登録したメールアドレスに認証用のメールが届くので、URLをクリックしてメールアドレスの認証を行えば登録は完了です。
リポジトリの作成
ユーザー登録が完了したら、リポジトリを作成します。リポジトリとは、Gitで扱うソースコードを格納するデータの格納庫のことです。
まずは登録した内容を入力してログインします。
次に、画面左上にあるテキストリンク「Create a repository」をクリックします。
リポジトリ名を決め、「Repository name」に入力します。リポジトリの種類では「Public」を選択します(「Private」は有料会員のみのサービスになります)。
簡単な説明や注意書きが書かれたファイルのREADMEファイル(説明用の文書ファイル)を作る場合は、「Initialize this repository with a README」をチェックしてください。
「Create Repository」をクリックすればリポジトリの作成は完了です。次の画面でリポジトリのURLが表示されます。
ツールのインストール
必要であれば、Gitを使うために必要なクライアントツール「SourceTree」をインストールします。SourceTreeをインストールすることでGitを使うためのツールがひと通りそろうため、容易に環境を構築することができます。
ターミナル画面を使わず、文字によるコマンド入力のインタフェースGUI(グラフィカルユーザーインタフェース)※で操作が可能なため、初心者にもおすすめです。公式サイトからSourceTreeをダウンロードできます。
- ※GUI(グラフィカルユーザーインタフェース):マウスやトラックパッドを使って画面上のアイコンやボタンを「視覚的に操作できる画面インタフェース」のこと。
GitHubの使い方とコマンドについて
実際にGitHubを使うための基本的な流れをご紹介します。
基本的な作業の流れについて
リポジトリの作成
自分のパソコン内にローカルリポジトリを作成します。まずSourceTreeを起動し、「新規」から「ローカルリポジトリを作成」を選びます。保存先のパスとレジストリ名を決め「作成」します(プロジェクト用フォルダーを作成する)。フォルダーを作成する際は以下のコマンドを入力します。
$ git init
①クローンを作成する
指定したディレクトリにリポジトリのクローンを作成(複製)します。クローンを作成する際は以下のコマンドを入力します。
$ git clone [リポジトリ名] [ディレクトリ名]
②ブランチをきる(追加)
担当者が別々にプログラムなどの修正や追加作業をする際にブランチを追加します。ブランチを追加する場合は以下のコマンドで実行できます。
$ git checkout -b [作成するブランチ名]
③ファイルの作成・編集(ワークツリーで編集)
担当者は割り振られた作業をワークツリー上で行います(ファイルの作成と編集)。
④インデックスへの追加
作成・編集したファイルを「インデックス(ステージング・エリア)」に追加します。インデックスへ追加する場合のコマンドは以下です。
$ git add [ファイル名]
⑤コミット(記録)する
インデックスに追加されたファイルにコミットし、ローカルリポジトリに記録します。コミットする際のコマンドは以下になります。
$ git commit
⑥リモートリポジトリへ送信(変更の書き込み)
ローカルリポジトリに反映された変更記録をリモートリポジトリへ送信します。リモートリポジトリへ送信する場合のコマンドは以下を入力します。
$ git push
⑦⑧編集記録のマージ(変更の取り込み処理)
現在のブランチ(HEAD)へ、他のブランチの変更情報を取り込みます。マージは以下のコマンドを入力して行います。
$ git merge [取り込みたいブランチ名]
⑨ローカルリポジトリへマージしたリポジトリを引き込む
更新されたリモートリポジトリを、次の作業を進めるためにローカルリポジトリに引き込みます。ローカルリポジトリへ引き込む際のコマンドは以下です。
$ git pull
作業の流れを繰り返す
プロジェクトが完了するまで、一連の流れを繰り返し行います。
よく使うGitのコマンド
通常時によく使うGitのコマンド
- ファイルをインデックスに追加:git add
Gitを使う上で、必ず行わなければならないコマンドが「git add」です。
git addコマンドを使うことで、Git管理の対象に追加することができるようになります。
git commitコマンドは、git addによってインデックスされたコンテンツをコミットするため、新規にファイルを作成した場合などは、必ずgit addコマンドを使用しましょう。
git addコマンドは、一つのファイルだけを指定することも、複数のファイルを指定することも可能です。
(ディレクトリ内のすべてのファイルをインデックスに追加する)
$ git add .
(識別子が.javaのファイルだけをインデックスに追加する)
$ git add *.java
(ディレクトリを指定して.javaのファイルだけをインデックスに追加する)
$ git add dir/*.java
(対話形式でインデックスに追加する)
$ git add -i
- インデックスに追加されたファイルの確認:git status
git statusコマンドは、インデックスに追加されたファイルの確認や、作業中のディレクトリとインデックスとの差異の確認に使用するコマンドです。
インデックスに追加されていないファイルや、インデックスのファイルと差分があるファイルなどを確認できます。
git statusコマンドで確認できる内容は次の通りです。
(filename.fileがインデックスに追加されていない状態)
$ git status
On branch master
Initial commit
Untracked files:
(use "git add <file>…" to include in what will be committed)
filename.file
nothing added to commit but untracked files present (use "git add" to track)
(filename.fileがインデックスに追加されている状態)
$ git status
~略~
Changes to be committed:
(use "git rm –cached <file>…" to unstage)
new file: filename.file
(filename.fileがコミットされた状態)
$ git status
On branch master
nothing to commit, working tree crean
(filename.fileが修正された状態)
$ git status
~略~
Changes not staged for commit:
(use "git add <file>…" to update what will be committed)
(use "git checkout -- <file>…" to discard changes in working directory)
modified: filename.file
no changes added to commit (use "git add" and/or "git commit -a")
- コミット:git commit
インデックスされた変更をリポジトリへ反映するために使用するコマンドがgit commitです。
git commitコマンドにも、次に例に挙げたようにいくつかオプションがあります。
(インデックスされた変更内容をすべてリポジトリへ反映:基本形)
$ git commit
(作業ディレクトリ上の変更されたファイルをインデックスしてリポジトリへ反映:新規ファイルはgit add必要)
$ git commit -a
(作業ディレクトリ上の指定ファイルをインデックスしてリポジトリへ反映:git addとgit commitの同時実行)
$ git commit filename.file
(作業ディレクトリ内のすべてのファイルをインデックスしてリポジトリへ反映)
$ git commit .
(コミットメッセージの修正)
$ git commit --amend
- コミットにメッセージ追加:git commit -m "○○"
どのような変更を行ったものなのかが分かるように、メッセージを残すことは重要です。
コミットメッセージには、5W1Hでいうところの「なぜ」と「何を」の部分を記載しましょう。
なぜなら、いつ・どこで・誰が・どうやっての部分は、ファイルのタイムスタンプなどで確認できますが、「なぜ」と「何を」の部分は説明しないと理解できないからです。
「何を」の部分は、例えば英語の動詞などを使って表現すると良いでしょう。
動詞 | 内容 |
---|---|
Add | 機能やファイルなどを追加 |
Fix | 機能やファイルなどを修正 |
Remove | 機能やファイルなどを削除 |
コミットメッセージに関しては現場によってルールも異なりますが、例えば次のようなメッセージを付けることで、どのようなコミット内容なのかが理解できますので、試してみてください。
「Add:○○機能の管理簡素化のため、○○ファイルの新規作成」
- マージ:git merge
ブランチを取り込む際に使用するコマンドが、git mergeコマンドです。
作業用のブランチをmasterブランチに反映するためには、次のように実行します。
(masterブランチへ移動)
$ git checkout master
(branch1をmasterブランチへ反映)
$ git merge branch1
上記がgit mergeコマンドの基本形です。
git mergeコマンドには3つのマージオプションがありますので、それぞれの違いについて説明します。
(マージコミットを作らずにHEADだけを移動:デフォルト)
$ git merge --ff branch1
(マージコミットを作成し、HEADを移動)
$ git merge --no-ff branch1
(HEADが最新、またはマージがファストフォワードの場合のみマージ)
$ git merge --ff-only
ファストフォワードとは、マージされるブランチのHEADをマージするブランチの先端にそのまま移動させるマージのことを表します。
マージコンフリクトが一切発生しない状態の場合にのみ、ファストフォワードは行われます。
- ファイルの削除:git rm FILE
gitで管理しているファイルは、OS上で削除すると空ファイルとして残ってしまう場合があります。
その際に、git上からファイルを削除するために使用するコマンドがgit rmコマンドです。
gitでの管理履歴と合わせてファイルを削除するため、不要となったファイルはgit rmコマンドで削除しましょう。
(gitのインデックス上と作業ディレクトリからfilename.fileファイルを削除)
$ git rm filename.file
(gitのインデックス上と作業ディレクトリからdir1ディレクトリを削除)
$ git rm -r dir1
(gitのインデックス上からは削除するが、作業ディレクトリからは削除しない)
$ git rm --cache filename.file
git上からファイルを削除する場合は、作業ディレクトリのファイルも不要となることが多いため、基本的にはgit rm FILEで問題ないでしょう。
場合によっては、gitのインデックス上のファイルのみを削除したいこともありますが、そのような場合には、オプションを付けて実行してみましょう。
トラブル時によく使うGitのコマンド
- 直前のコミットを削除する(ソースはそのまま):git reset --soft HEAD^
誤ってコミットをしてしまった場合など、コミットを取り消したい場合に使用するコマンドとして、git resetがあります。
git resetコマンドのオプションとして、--softを使用すると、HEADの位置のみを変更することが可能です。
(直前のコミットのみ取り消す)
$ git reset --soft HEAD^
--softオプションでは、HEADの位置のみを戻すため、直前のgit commitコマンドが実行されていない状態になります。
そのため、作業ディレクトリやインデックス上のファイルの修正はなされたままです。
使用用途としては、修正忘れなどがありながらコミットしてしまった場合に、修正忘れに対応したあとにコミットをやり直す、といった使い方が考えられます。
- 2個のコミットを削除する(ソースも戻す):git reset --hard HEAD~2
こちらも同様に誤ってコミットをしてしまい、コミットを取り消したい場合に使用するコマンドの例ですが、--softではなく--hardオプションを使用しています。
(2個のコミットを削除し、修正内容も完全に戻す)
$ git reset --hard HEAD~2
--hardオプションは、「過去のコミット直後の状態に強制的に戻す」ために使用するコマンドです。
--hardオプションを使用すると、HEADの位置、インデックス上の修正、作業ディレクトリ内の修正がすべて指定したコミットの実行直後の状態に戻ります。
ローカルブランチの状態がリモートブランチの状態と異ってしまい、「とにかくリモート側に合わせたい」という場合に利用することがあります。
--hardオプションは簡単にコミットの状態をリセットできるものですが、今までの修正内容を強制的に戻してしまうものです。
そのため、作業内容が消えてしまわないように、慎重に行いましょう。
- Pushしたコミットの取り消し:git revert
git resetはローカルリポジトリに対して、誤ってコミットしてしまったものを戻すためのものでしたが、リモートリポジトリに対して誤ってコミットしてしまったものを戻す場合には、git revertコマンドを利用します。
(直前のコミットを打ち消すコミットの作成)
$ git revert
(打ち消したコミットを再度リモートリポジトリへPush)
$ git push origin master
Pushしたコミットの取消方法はいくつかありますが、その中でも最も安全な取消方法です。
過去の履歴を強制的に書き換える方法で、Pushしたコミットを取り消すことも可能ですが、操作を誤ると消すつもりのなかったコミットまで消してしまいかねません。
まずは、git revertによる方法をマスターしましょう。
デメリットとしては不要なコミット履歴が増えることで、履歴が見にくくなってしまうことです。
GitHubの応用
GitHubを簡単に使うための便利なツールがSourceTreeです。ターミナル画面で複雑なコマンドを入力する必要がないため、初心者にも使いやすくなっています。
公式サイトからダウンロードすればすぐに使えるので検討してみてください。
GitHubを活用して効率的な開発・運用を
GitHubの使い方、覚えておきたいコマンドについて解説してきました。GitHub は複数人で作業を行う場合に、変更履歴の確認やコメントでアドバイスできるなど、より作業を効率的に進められます。今回紹介した、よく使うGitのコマンドを参考に、システムを開発・運用をする際には、GitHubを利用してみましょう。
AKKODiS(派遣・紹介予定派遣)のキャリア開発研修プログラム「AKKODiS Academy」では、キャリアチェンジを目指す方の受講を募集しています。働きながら学べ、キャリア相談やお仕事紹介など就業をサポートします。
AKKODiSは、GitHubだけでなく、様々なテクノロジーを学び、IT・エンジニアとして活躍していきたい皆様を応援します。
(2019年9月現在)