Git/GitHub基礎

2023年08月08日

ファイルのバージョン管理ツールであるGitと、そのホスティングサービスであるGitHubに関して。

目次

1. Gitとは

Gitは分散型のバージョン管理システムの1つ。
ファイルのバージョン管理が簡単にできるツールといえる。
また以下のような特徴がGitにはある。

  • 古いバージョンに簡単に戻せる
  • 新旧のファイルを一元管理できる
  • 編集した履歴を複数人で共有できる
  • 複数人で修正した部分を一つに統合できる

1.1. リポジトリ(Repository)

リポジトリとは、ファイルやディレクトリを入れて保存しておく貯蔵庫のこと。
Gitにおけるリポジトリは以下の2種類に分かれている。

  • リモートリポジトリ(共有リポジトリ) ・・・ 特定のサーバー上に設置して複数人で共有するためのリポジトリ
  • ローカルリポジトリ(個人リポジトリ) ・・・ ユーザーごとに配置される手元のマシンで編集できるリポジトリ

2種類のリポジトリに分けることで、普段の作業はそれぞれのユーザーが手元のローカルリポジトリで行い、作業内容を共有するときにリモートリポジトリで公開するという使い方になる。
リモートリポジトリを介して他のユーザーの作業内容を把握することも可能。

1.2. コミット(Commit)

コミットは、ファイルやディレクトリの編集作業をローカルリポジトリに記録するために必要な操作のこと。
コミットを実行するとファイルを編集した日時を記録したファイルが生成される。
コミットを実行するごとにファイルが生成され、時系列順にならんで格納されるので、ファイルを編集した履歴やその内容を確認することができる。

1.3. プッシュ(Push)

プッシュとは、ローカルリポジトリにあるファイルをリモートリポジトリに送信して保存する機能。
共有リポジトリへの反映が行われるため、アップロードともいえる。

クローンと異なるのはローカルリポジトリとの差分のみをダウンロードして更新する点

1.4. プル(Pull)

プルとは、共有されているリモートリポジトリに保存されているファイルの内、ローカルリポジトリ(あなたのローカル環境)に無いファイルや他のユーザーが更新したファイルのみをダウンロードする機能。
ようするにリモートリポジトリの内容を同期させるとも言える。

1.5. クローン(Clone)

クローンとは、ダウンロードに近いものもの。
複数人で共有しているファイル(リモートリポジトリ)をまるごと自分のローカル環境(ローカルリポジトリ)に保存する機能。
まったく新規で開発の共有を始める場合に最初に行う作業といえる。

1.6. ブランチ(Branch)

ブランチとは、ファイルの編集履歴を分岐させて記録していく機能のこと。
WEBサービスやソフトウェアの開発において、バグの修正や、機能の追加などのファイル編集作業は複数のユーザーが同時に行うことも少なくない。
並行して同時に行われる作業を正確に管理するためにGitにはブランチという機能が用意されています。これがGitのバージョン管理を効率的にし、間違いを減らすためにもっとも活かされている機能ともいえる。

例としてマスターブランチであるメインのブランチと、そこから分岐してバグの修正や、機能の追加を行っているブランチを記すと以下のようになる。

sample

1.7. マージ(Merge)

複数のブランチを一つにまとめて、完成形に近づけることをマージと呼ぶ。
ブランチの図で言うとバグの修正や、機能の追加を行ったブランチがマスターブランチに統合されている部分のこと。

1.8. フェッチ(Fetch)

リモートリポジトリからファイルの最新情報を取得してくる操作のこと。共有されているファイル(リモートリポジトリ)の更新を確認したり、複数人の作業の擦り合わせのために使う機能といえる。

プルと異なる点はローカルのファイルを更新することはないこと。
複数人で同じファイルを編集しているときでもお互い干渉しないようにするための機能と言える。

2. Git&GitHubの使い方

2.1. ローカルリポジトリにおける作業フロー(Git)

2.1.1. GitへのGitHubアカウントへの設定

Git BashまたはターミナルへのGitHubのアカウントの登録は以下のコマンドで行う。

git config --global user.name GitHub登録ユーザ名
git config --global user.email Github登録メールアドレス

GitHub登録ユーザ名とGithub登録メールアドレスは各自用意したものを代入してください。
またGitBashやターミナルへGitHubへのユーザ情報を登録できたかどうかの確認は以下のコマンドで行う。

git config --list

2.1.2. ローカルリポジトリの作成

Git管理したいフォルダに「cdコマンド」で移動する。
その後、リポジトリの新規作成は以下コマンドで行う。
これを行うことでローカルリポジトリが作成できる。
.gitファイルが作成される。

git init

2.1.3. ローカルリポジトリでのGitフロー

ステージングエリアへのファイル追加は以下のコマンドで行う。

git addコマンドでは内容を変更したファイルをステージングエリアに追加します

git add ファイル名
git add .

git commit -m \"コメント\"コマンドでローカルリポジトリへコミットを行います。

git commit -m \"コメント1行目(概要)\" -m \"\" -m \"コメント3行目(詳細/理由)\"

一般的な概要のコメント(英語)

  • add : 機能やファイルの追加
  • update : 機能の修正(リファクタリングを含む)
  • fix : バグの修正
  • remove : ファイルの削除

詳細に管理したい場合のコメント(英語)

  • change : 仕様変更
  • clean:リファクタリングなど
  • upgrade : バージョンアップ
  • revert : 変更取り消し

2.1.4. ブランチの切り方と切り替え方

ブランチの作成は以下のコマンドで行います。(ブランチ名なしで現在のブランチを確認可能)

git branch ブランチ名

ブランチの移動は以下コマンドで行います。

git checkout ブランチ名

git switch ブランチ名

git checkout-bを付けるとブランチ作成と切り替えをまとめて実行可能。

2.1.5. リポジトリの状態の確認

git status

2.1.6. コミットした履歴の確認

git log
オプション 詳細
–oneline 1行での表示
-p ファイル名 ファイル差分の表示
-n 数字 表示数の制限表示

2.1.7. ファイルの削除とステージングエリアへの追加

ファイル削除後に以下のコマンドを実行

git rm ファイル名

オプション-rをつけると完全削除

2.1.8. ファイルの変更差分の確認

git diff 

2.1.9. ファイルの状態を直前のバージョンに戻す

git addをする前の状態で戻す場合

git checkout .

git checkout ファイル名

git addをした後の状態で戻す場合

git reset --hard HEAD

git commitをした後に戻す場合(直前にcommitしたものも取り消す)

git reset --hard HEAD~

特定のファイルのみのバージョンを戻す場合

git checkout コミットID ファイル名

2.1.10. ファイルを古いバージョンに戻す

  1. git logでCommit履歴を確認しコミットIDを取得
  2. git checkout を行うことでIDのCommitバージョンに戻せる

なお、特定のファイルのみバージョン戻す場合は2.1.9項目を参照。

戻したバージョン(以前のバージョン)の編集を行い、そこから最新バージョンにする場合のcommitは以下の通り。

git commit -a -m \"\" -m \" \" -m \"\"

2.1.11. Git管理下のフォルダ名を変更する

git mv フォルダ名/ 変更後のフォルダ名/

2.1.12. 既にGit管理化となっているファイルやディレクトリをgit管理化から外す

git rm --cached ファイル名

git rm -r --cached ディレクトリ名

2.1.13 Commitしたメッセージを変更する

変更したいコミットの履歴を確認、git commit --amendで最新のコミットが修正モードにする。

git log

git commit --amend

2.2. リモートリポジトリを含めた作業フロー(GitHub)

2.2.1. リモートリポジトリの作成

GitHubにブラウザからアクセスしてリモートリポジトリを用意する。

2.2.2. リモートリポジトリへのプッシュ

初期設定は以下のコマンドを実行する。

git remote add origin \"GitHubURL\"

以下コマンドを実行する。(ローカルリポジトリのブランチ名はこの場合はmaster)

git push -u origin master

2.2.3. リモートリポジトリからプル(ローカルへの反映)

git pull

2.2.4. リモートリポジトリの確認と変更(上書き)方法

リモートリポジトリの確認は以下コマンドまたは.git/configで確認可能。

git remote -v

リモートリポジトリの変更は以下コマンドより

git remote set-url リモートレポジトリ名(masterなど) 新しいリモートリポジトリのURL

2.2.5. リモートリポジトリの削除

rmで完全削除

git remote rm リモートレポジトリ名

2.2.6. リモートリポジトリからのクローン

git clone リモートリポジトリのURL

2.3. その他のGitコマンド

コマンド 詳細 オプション
git ls-files Gitで管理しているファイル一覧の表示

3. .gitignoreに関して

.gitignoreではgitで管理したくないファイルを指定できます。
例えば以下のようなものです。

  • 自動生成されるファイル
  • パスワード・IDなどが記載されるファイル(.env)など
#拡張子ファイルを無視
.拡張子
#指定したファイルの除外
ファイル名
#ディレクトリ以下で除外(特定ファイルの無視)
フォルダ名/