こんにちはヤク学長です。
データサイエンティスト兼ファーマシストで、アルゴリズムやBI開発を行っています。
本記事の目的は、「Gitの基本操作を知る」ことを目的としています。
【本記事のもくじ】
まず、「Git」に真剣に取り組むための概要を解説します。
下記の方法で、簡単に概要を抑えることができます。
- 1.Git概要
- 2.Gitのインストール
- 3.Gitの基本的なワークフロー
それでは、上から順番に見ていきます。
なお、本上記の方法を順番に抑えれば成果が出ます。
記事の内容は「転載 & 引用OK」問題ありません。
1.Git概要
Gitとは
Gitは、分散型バージョン管理システムの一つで、ソースコードなどの変更履歴を追跡・管理するためのツールです。Gitは、プログラマーや開発者が複数人で協力してプロジェクトを進める際に、バージョン管理やチーム開発を効率的に行うことができます。
Gitの最も基本的な概念は、リポジトリです。リポジトリとは、Gitが管理する変更履歴を保存する場所であり、ソースコードやドキュメントなどのファイルが含まれます。リポジトリは、ローカルリポジトリとリモートリポジトリの二つに分かれ、ローカルリポジトリは自分のPC内に、リモートリポジトリはネットワーク上に存在します。
Gitは、コマンドラインで操作することができますが、多くの場合、GUIツールを使用することが一般的です。Gitの主な操作には、コミット、プッシュ、プル、マージなどがあります。
コミットは、変更履歴を保存する操作であり、プッシュは、ローカルリポジトリの変更履歴をリモートリポジトリに反映する操作です。プルは、リモートリポジトリの変更履歴をローカルリポジトリに取り込む操作であり、マージは、複数のブランチを統合する操作です。
Gitは、開発者によって広く使用されており、多くのオープンソースプロジェクトや企業で採用されています。Gitの高い柔軟性と豊富な機能を活用することで、より効率的な開発が実現できます。
バージョン管理すると何が嬉しいのか?
バージョン管理をすることで、次のようなメリットがあります。
- 変更履歴の管理が容易になる バージョン管理をすることで、ファイルやコードの変更履歴を保存し、いつ、誰が、どのように変更を行ったかを追跡することができます。このため、バグやエラーの発生時に、どの変更によって問題が起きたかを特定し、原因の究明や修正を迅速かつ正確に行うことができます。
- 複数人での開発が容易になる バージョン管理をすることで、複数の開発者が同時にコードを編集し、変更を統合することができます。バージョン管理システムは、変更履歴を統合し、衝突を解決するための機能を提供します。また、バージョン管理システムによって、開発者同士のコードの競合を防止することができます。
- 過去のバージョンの復元が容易になる バージョン管理をすることで、ファイルやコードの以前のバージョンを復元することが容易になります。これにより、誤った変更を元に戻すことができたり、以前のバージョンと比較することで、開発の進捗状況や変更の効果を確認することができます。
- 安全なバックアップが取れる バージョン管理をすることで、データを安全にバックアップすることができます。バージョン管理システムは、変更履歴を保存するため、誤った変更や削除、紛失などによってデータを失うことを防止することができます。
以上のように、バージョン管理をすることで、開発プロセスを効率的にし、安全かつ正確な開発を実現することができます。
Gitの仕組み
Gitは、分散型バージョン管理システムであり、以下のような仕組みで機能しています。
- リポジトリ(Repository) Gitは、全てのファイルや履歴を保存する場所である「リポジトリ」を持ちます。リポジトリは、ローカルリポジトリとリモートリポジトリの2種類があります。ローカルリポジトリは、開発者のPC上に保存され、リモートリポジトリは、複数の開発者がアクセス可能な場所に保存されます。
- ステージング(Staging) Gitでは、変更したファイルをステージングエリアに登録する必要があります。ステージングエリアに登録することで、変更履歴を保存するための準備が整います。
- コミット(Commit) ステージングエリアに登録された変更履歴を、リポジトリに記録することを「コミット」と呼びます。コミットされた変更履歴は、ハッシュ値(SHA-1)で一意に識別されます。コミットされた履歴は、リポジトリ内で時間軸に沿って管理されます。
- ブランチ(Branch) Gitでは、ブランチという機能を用いて、複数のバージョンを並行して管理することができます。開発者は、ブランチを切り替えることで、異なるバージョンを作成し、それぞれの変更履歴を管理することができます。
- プッシュ(Push)とプル(Pull) ローカルリポジトリにコミットした変更履歴を、リモートリポジトリに反映することを「プッシュ」と呼びます。また、リモートリポジトリに変更履歴が反映された場合、ローカルリポジトリに反映することを「プル」と呼びます。
以上のように、Gitは、リポジトリ、ステージング、コミット、ブランチ、プッシュ、プルといった機能を用いて、ファイルの変更履歴を管理することができます。また、分散型の仕組みにより、複数の開発者が同時に開発を進めることも可能です。
GitHubとは
GitHubは、Gitを利用した分散型バージョン管理システムを提供する、世界中の開発者が利用するWebホスティングサービスです。
GitHubでは、ユーザーがリポジトリを作成し、自分のプロジェクトを管理することができます。また、他のユーザーと共同で開発することも可能で、複数の開発者が同時にコードを編集し、変更履歴を管理することができます。
GitHubは、オープンソースプロジェクトや商用プロジェクトなど、多種多様なプロジェクトに利用されています。また、GitHubには多くの機能が備わっており、イシュートラッキング、コードレビュー、Wiki、ドキュメント、ダウンロードなどの機能を利用することができます。
GitHubは、Gitを利用することで、分散型の開発を支援し、開発者たちの協力的な開発を促進しています。また、GitHub上には、多くのオープンソースプロジェクトが公開されており、それらを利用することで、自身のプロジェクトの開発効率を上げることができます。
GitHubの特徴
GitHubの主な特徴は以下の通りです。
- Gitを利用した分散型バージョン管理システム GitHubは、Gitをベースにしたバージョン管理システムを提供しており、複数の開発者が同時に開発を進めることができます。また、分散型の仕組みにより、リポジトリを自由に複製して開発を進めることができます。
- オープンソースプロジェクトの共有 GitHub上には、多くのオープンソースプロジェクトが公開されています。これらのプロジェクトは、誰でも自由に閲覧・ダウンロードすることができ、他の開発者と共同で開発することもできます。
- コードレビュー機能 GitHubでは、コードレビュー機能があります。開発者は、コードに対するコメントや修正を行うことができ、他の開発者がレビューすることで、品質向上やバグ修正などが行われます。
- チーム開発に最適化された機能 GitHubには、複数の開発者が協力して開発するための機能が多数あります。たとえば、イシュートラッキングやプルリクエスト機能などがあり、開発者たちが作業を効率的に進めることができます。
- ホスティング機能 GitHubは、リポジトリのホスティングを提供しています。つまり、GitHub上でリポジトリを管理することができ、リポジトリを公開することができます。また、GitHub Pagesという機能を使えば、静的なWebサイトを公開することもできます。
以上のように、GitHubは、Gitをベースにしたバージョン管理システムを中心に、多くの機能を備えています。GitHubを使うことで、開発者たちはより効率的に開発を進めることができます。
2.Gitのインストール
WindowsでGitをインストールする手順は以下の通りです。
- Git for Windowsのダウンロード Git for Windowsをダウンロードするために、以下のサイトにアクセスします。 https://gitforwindows.org/
- ダウンロードしたファイルの実行 ダウンロードしたファイルをクリックして実行します。その後、言語やインストール先の設定を行います。
- インストールの確認 インストールが完了したら、Git Bashというアプリケーションを起動して、バージョン情報が表示されることを確認します。Git Bashは、Gitコマンドを実行するためのコンソールアプリケーションです。
- Gitの設定 Gitを使う前に、ユーザー名とメールアドレスを設定する必要があります。以下のコマンドをGit Bashで実行し、ユーザー名とメールアドレスを設定します。
$ git config --global user.name "Your Name"
$ git config --global user.email "your_email@example.com"
以上の手順を実行することで、Windows環境でGitをインストールすることができます。
Gitの登録
Gitを使用するためには、以下の手順で登録が必要です。
- GitHubのアカウント登録 まず、GitHubのウェブサイトにアクセスして、アカウント登録を行います。GitHubは、無料でアカウントを作成できます。アカウント登録には、メールアドレスやパスワードの設定が必要です。
- SSHキーの生成 次に、SSHキーを生成します。SSHキーは、GitとGitHubの間で安全に通信するための暗号鍵です。SSHキーを生成するために、以下のコマンドをターミナルで実行します。
-
$ ssh-keygen -t ed25519 -C "your_email@example.com"
- このコマンドを実行すると、SSHキーの生成を促すプロンプトが表示されます。何も入力せずにEnterキーを押すことで、デフォルトの設定でSSHキーが生成されます。
- 公開鍵の登録 SSHキーの生成が完了したら、公開鍵をGitHubに登録します。公開鍵は、GitHubに対してGitの操作を許可するために必要です。公開鍵の登録は、以下の手順で行います。
- GitHubのウェブサイトにログインします。
- プロフィール画面の右上にある設定アイコンをクリックします。
- 左のメニューから「SSH and GPG keys」を選択します。
- 「New SSH key」をクリックして、公開鍵を貼り付けます。
以上の手順で、GitHubへの登録が完了します。これで、Gitを使用する準備が整いました。
Gitの初期設定
Gitを使用する前に、以下の初期設定を行うことをお勧めします。
- ユーザー名とメールアドレスの設定 Gitでコミットする際に、ユーザー名とメールアドレスが必要になります。以下のコマンドで設定を行います。
$ git config --global user.name "Your Name"
$ git config --global user.email "your_email@example.com"
- テキストエディタの設定 コミットメッセージを入力する際に使用するテキストエディタを設定します。デフォルトでは、Vimが設定されていますが、別のエディタを使用したい場合は以下のように設定します。
$ git config --global core.editor "nano"
- 改行コードの設定 Windows、macOS、LinuxなどのOSによって改行コードが異なるため、Gitで管理するファイルの改行コードの設定が必要です。以下のように設定します。
- Windowsの場合
$ git config --global core.autocrlf true
- macOS、Linuxの場合
$ git config --global core.autocrlf input
以上の初期設定を行うことで、Gitをより効率的に使用することができます。
3.Gitの基本的なワークフロー
新規プロジェクトからはじめよう
Gitを使用して新規プロジェクトをはじめる場合の手順を説明します。
- プロジェクトディレクトリの作成 まず、新規プロジェクトを作成するためのディレクトリを作成します。例えば、以下のようなコマンドでディレクトリを作成します。
$ mkdir myproject
- Gitリポジトリの初期化 作成したディレクトリをGitリポジトリとして初期化します。以下のコマンドで初期化します。
$ cd myproject
$ git init
- ファイルの追加 プロジェクトで管理するファイルを作成し、Gitで管理するために追加します。以下のようにファイルを作成し、追加します。
$ echo "Hello, world!" > index.html
$ git add index.html
- コミット 追加したファイルをコミットします。コミットは、変更履歴を保存するためのものであり、変更内容に対する説明をつける必要があります。以下のコマンドでコミットします。
$ git commit -m "Initial commit"
以上の手順で、新規プロジェクトをGitで管理する準備が整いました。必要に応じて、ファイルの変更や追加を行い、コミットすることができます。また、GitHubなどのリモートリポジトリにプッシュすることで、他の人と共有することもできます。
既存プロジェクトからはじめよう
Gitを使用して既存のプロジェクトをバージョン管理する場合の手順を説明します。
- プロジェクトディレクトリに移動 既存のプロジェクトがあるディレクトリに移動します。以下のようにコマンドを入力します。
$ cd /path/to/project
- Gitリポジトリの初期化 移動したディレクトリをGitリポジトリとして初期化します。以下のコマンドで初期化します。
$ git init
- ファイルの追加 プロジェクトで管理するファイルを追加します。以下のように、ファイルを追加します。
$ git add .
- コミット 追加したファイルをコミットします。以下のコマンドでコミットします。
$ git commit -m "Initial commit"
以上の手順で、既存のプロジェクトをGitで管理する準備が整いました。必要に応じて、ファイルの変更や追加を行い、コミットすることができます。また、GitHubなどのリモートリポジトリにプッシュすることで、他の人と共有することもできます。
Gitの基本的なワークフロー
Gitの基本的なワークフローは以下のようになります。
- プロジェクトのクローン まず、リモートリポジトリからプロジェクトをクローンして、自分のローカル環境に複製します。以下のコマンドでクローンできます。
$ git clone <リモートリポジトリのURL>
- 変更の取得 プロジェクトの変更を取得するために、リモートリポジトリからプルします。以下のコマンドでプルできます。
$ git pull
- 変更の反映 ローカル環境でファイルを編集した場合、変更をステージングエリアに追加し、コミットします。以下のコマンドでステージングエリアに追加し、コミットできます。
$ git add <変更したファイル> $ git commit -m "変更内容を記述"
- リモートリポジトリへの反映 ローカルリポジトリでの変更をリモートリポジトリに反映するために、プッシュします。以下のコマンドでプッシュできます。
$ git push
- ブランチの作成・切り替え・マージ 複数の開発者が同時に作業する場合、ブランチを作成して、各自が変更を加えます。以下のコマンドでブランチを作成、切り替えできます。
$ git branch <新しいブランチ名> $ git checkout <ブランチ名>
また、変更が完了したら、マージしてメインブランチに反映します。以下のコマンドでマージできます。
$ git checkout <メインブランチ名> $ git merge <マージするブランチ名>
以上がGitの基本的なワークフローになります。それぞれのコマンドには、様々なオプションがありますので、必要に応じてマニュアルなどを参照してください。
変更をコミットする
変更をコミットするには、以下の手順を実行します。
- ステージングエリアに変更を追加する
変更をコミットする前に、まず変更内容をステージングエリアに追加する必要があります。ステージングエリアに追加することで、コミット対象の変更を明示的に指定できます。変更をステージングエリアに追加するには、以下のコマンドを使用します。
$ git add <変更したファイル>
- コミットする
変更をステージングエリアに追加したら、コミットを実行します。コミットには、変更内容を説明するメッセージを付ける必要があります。以下のコマンドを使用します。
$ git commit -m "変更内容を記述"
コミットが成功すると、ローカルリポジトリに変更内容が保存されます。また、変更履歴が記録され、コミット時に付けたメッセージとともに、リポジトリに保存されます。
以上が、Gitで変更をコミットする手順です。注意点として、変更をコミットする前に、必ず変更内容を確認し、コミットする変更が意図したものであることを確認してください。また、コミットメッセージは、わかりやすく、簡潔に記述するように心がけてください。
補足:gitで使うVimコマンド
Gitでコミットメッセージを編集する際に、デフォルトのエディタとしてVimが起動する場合があります。Vimは初めて触れる人にとっては操作が難しいため、ここでよく使うVimコマンドをいくつか紹介します。
- i: 挿入モードに移行する
- Esc: 挿入モードからコマンドモードに戻る
- :wq: 変更を保存してVimを終了する
- :q!: 変更を破棄してVimを強制終了する
- dd: カーソルがある行を削除する
- u: 直前の操作を取り消す
これらのコマンドを使うことで、Vimを使ってGitのコミットメッセージを編集することができます。ただし、Vimが使いにくい場合は、別のエディタに変更することもできます。
分かりやすいコミットメッセージ
分かりやすいコミットメッセージは、次のように書くことが推奨されています。
1行目:変更内容の要約 長くても50文字程度。
2行目:空行
3行目:変更した理由 変更内容に対する背景や意図など、なぜこの変更が必要だったかを簡潔に説明する。
この行は必須ではありませんが、変更内容が複雑であったり、レビューのために他の人に説明する必要がある場合には役立ちます。
色々な変更をコミットする
一度に複数の変更をコミットすることもできます。以下の手順で実行できます。
- 変更をステージングエリアに追加する
複数の変更をコミットする場合でも、まずは変更内容をステージングエリアに追加します。追加する方法は、単一の変更をコミットする場合と同じです。
$ git add <変更したファイル>
複数のファイルを追加する場合は、以下のように複数のファイルを指定します。
$ git add <変更したファイル1> <変更したファイル2> ...
また、全ての変更を一度にステージングエリアに追加する場合は、以下のコマンドを使用します。
$ git add .
- コミットする
変更内容をステージングエリアに追加したら、コミットを実行します。コミット時に、変更内容を説明するメッセージを付ける必要があります。
$ git commit -m "変更内容を記述"
ここで、注意点として、複数の変更を一度にコミットする場合は、それぞれの変更が互いに関連していることが望ましいです。もし、複数の変更が全く別々のものである場合は、別々のコミットとして分けた方がよいでしょう。
以上が、複数の変更を一度にコミットする方法です。
現在の状況を確認する
Gitで現在の状況を確認するには、以下のコマンドを使用します。
$ git status
このコマンドを実行すると、現在のブランチ、ステージングエリアに追加されている変更、コミットされていない変更などが表示されます。
また、ブランチの履歴やコミットの差分を表示する場合は、以下のコマンドを使用します。
$ git log
このコマンドを実行すると、現在のブランチのコミット履歴が表示されます。表示される内容には、コミットのハッシュ値、コミットメッセージ、コミットした人、コミット日時などが含まれます。また、差分を表示する場合は、-p
オプションを付けて以下のように入力します。
$ git log -p
これにより、各コミットで変更されたファイルの差分が表示されます。
以上が、Gitで現在の状況を確認する方法です。
変更履歴を確認する
Gitでは、過去のコミット履歴を確認することができます。以下のコマンドを使用します。
$ git log
このコマンドを実行すると、現在のブランチのコミット履歴が表示されます。表示される内容には、コミットのハッシュ値、コミットメッセージ、コミットした人、コミット日時などが含まれます。
また、特定のコミットの変更差分を確認する場合は、以下のコマンドを使用します。
$ git diff <コミット1> <コミット2>
ここで、<コミット1>
と<コミット2>
には、比較したい2つのコミットのハッシュ値を指定します。このコマンドを実行すると、指定された2つのコミット間の差分が表示されます。
さらに、指定したコミットから現在の作業ツリーまでの変更差分を確認する場合は、以下のコマンドを使用します。
$ git diff <コミット>
ここで、<コミット>
には、現在の作業ツリーと比較したいコミットのハッシュ値を指定します。
以上が、Gitで変更履歴を確認する方法です。
変更差分を確認する
Gitでは、現在の作業ディレクトリとステージングエリア、あるいは異なるコミット間の変更差分を確認することができます。以下に、それぞれの確認方法を説明します。
- 現在の作業ディレクトリとステージングエリアの変更差分を確認する
以下のコマンドを使用します。
$ git diff
このコマンドを実行すると、現在の作業ディレクトリとステージングエリアの差分が表示されます。変更されたファイルの名前、変更前と変更後の行数、変更内容などが表示されます。
- ステージングエリアとリポジトリ内のコミット間の変更差分を確認する
以下のコマンドを使用します。
$ git diff --staged
このコマンドを実行すると、ステージングエリアとリポジトリ内の最新コミットとの差分が表示されます。ステージングエリアに追加された変更内容が表示されます。
- 異なる2つのコミット間の変更差分を確認する
以下のコマンドを使用します。
$ git diff <コミット1> <コミット2>
ここで、
<コミット1>
と<コミット2>
には、比較したい2つのコミットのハッシュ値を指定します。このコマンドを実行すると、指定された2つのコミット間の差分が表示されます。
以上が、Gitで変更差分を確認する方法です。
GitHubにプッシュしよう
GitHubに変更をプッシュするには、以下の手順を実行します。
- ローカルリポジトリの変更をコミットする
$ git add . $ git commit -m "コミットメッセージ"
- GitHubリポジトリをリモートリポジトリとして追加する
$ git remote add origin https://github.com/ユーザー名/リポジトリ名.git
ここで、
https://github.com/ユーザー名/リポジトリ名.git
は、GitHub上のリポジトリのURLです。origin
は、リモートリポジトリの名前で、GitHub上のリポジトリのデフォルト名として使用されます。 - ローカルの変更をリモートリポジトリにプッシュする
$ git push -u origin master
ここで、
origin
は、先程追加したリモートリポジトリの名前で、master
は、プッシュするブランチ名です。-u
オプションを使用することで、次回以降のプッシュ時には、git push
のみでプッシュできるようになります。
これで、ローカルリポジトリの変更がGitHub上のリポジトリにプッシュされました。また、他のユーザーがGitHub上のリポジトリをクローンして作業する場合は、先程追加したリモートリポジトリを使用して、変更内容をプルして最新の状態に更新することができます。
GitHubの画面を確認しよう
GitHubのウェブサイト上で、リポジトリにプッシュした変更内容を確認するには、以下の手順を実行します。
- GitHubのウェブサイトにアクセスし、自分のアカウントにログインします。
- リポジトリを開きます。リポジトリ名をクリックしてください。
- 「Code」タブをクリックし、現在のブランチが表示されるようにします。
- 変更内容を確認するには、「commits」をクリックします。そうすると、直近のコミットの一覧が表示されます。
- コミットをクリックすると、そのコミットでの変更内容を確認できます。ファイル単位で差分が表示されるので、変更内容を細かく確認することができます。
- 「branches」タブをクリックすることで、現在のブランチだけでなく、他のブランチの情報も確認できます。
これらの手順で、GitHub上でのリポジトリの変更内容を確認することができます。また、Pull RequestやIssuesといった機能を使って、他の開発者とコラボレーションすることもできます。
バージョン管理したくないファイルをGitの管理から外す
Gitで管理されているファイルから除外したい場合、.gitignore
ファイルを作成し、除外したいファイルやフォルダの名前を記述します。
例えば、config.ini
ファイルを除外する場合、.gitignore
ファイルに以下のように記述します。
config.ini
また、logs
フォルダ内の全てのファイルを除外する場合、以下のように記述します。
logs/*
これらの.gitignore
ファイルに記述されたファイルやフォルダは、Gitの管理から除外されます。ただし、.gitignore
ファイルを作成した後は、git add
コマンドで新規ファイルを追加する際には、.gitignore
ファイルに記述したファイルやフォルダが除外されるため、注意が必要です。また、すでにGitで管理されているファイルを除外する場合は、以下のようなコマンドを使用します。
git rm --cached <ファイル名>
このコマンドを実行することで、ファイルはGitの管理から外されますが、実際のファイルは削除されません。これにより、ファイルを管理対象から外すことができます。
Gitのよく使うコマンド集
Gitのよく使うコマンドをいくつか紹介します。
git init
: 新規リポジトリを作成する。git clone <リポジトリのURL>
: リポジトリをクローンする。git status
: 現在の状態を確認する。git add <ファイル名>
: ファイルをステージングエリアに追加する。git add .
: 変更されたすべてのファイルをステージングエリアに追加する。git commit -m "<コミットメッセージ>"
: ステージングエリアにあるファイルをコミットする。git log
: コミット履歴を表示する。git branch
: ローカルブランチの一覧を表示する。git branch <ブランチ名>
: 新しいブランチを作成する。git checkout <ブランチ名>
: 指定したブランチに切り替える。git merge <ブランチ名>
: 指定したブランチを現在のブランチにマージする。git push <リモートリポジトリ名> <ローカルブランチ名>:<リモートブランチ名>
: ローカルブランチの変更内容をリモートリポジトリにプッシュする。git pull <リモートリポジトリ名> <リモートブランチ名>:<ローカルブランチ名>
: リモートリポジトリから変更内容をプルして、ローカルブランチにマージする。
これらのコマンドを使うことで、基本的なGitの操作が行えます。ただし、Gitは非常に柔軟なツールであり、多くのオプションや機能があります。Gitの公式ドキュメントを参照しながら、より高度な操作を学んでいくことが重要です。
というわけで、今回は以上です。大変大変お疲れ様でした。
引き続きで、徐々に発信していきます。
コメントや感想を受け付けています。ちょっとした感想でもいいので嬉しいです。
それでは、以上です。