Git とは
Git とは、バージョン (ファイルの変更履歴) を管理するソフトウェアです。
Git と使うと、簡単に編集前のファイルに戻すことができます。
以下のような混沌としたバージョン管理とはおさらばできます。
- 資料.txt
- 資料のコピー.txt
- 資料の最新.txt
- 資料の最終版.txt
- 資料の最終版v2.txt
- 資料の最終版のコピー.txt
Git の用語
Git でよく利用する用語は以下です。
用語 | 説明 |
---|---|
リポジトリ | ファイルの変更履歴を保存する場所 |
ローカルリポジトリ | 個人の PC 上に作成し、自分だけがアクセスできるリポジトリ |
リモートリポジトリ | サーバー上に作成し、複数人がアクセスできるリポジトリ |
ワークツリー | ファイルの変更作業をしているディレクトリ |
インデックス | ファイルの変更履歴を一時的に登録する領域 |
ステージング | ワークツリーの変更履歴をインデックスに登録 |
コミット | インデックスに登録した変更履歴をローカルリポジトリに反映 |
ブランチ | 変更履歴を分岐して、複数の変更履歴を作る |
チェックアウト | ワークツリーにブランチを展開 |
マージ | 分岐した2つの変更履歴を1つにする |
クローン | リモートリポジトリの複製を、ローカルリポジトリに作成 |
プッシュ | ローカルリポジトリのコミットを、リモートリポジトリに渡す |
リモート追跡ブランチ (origin/master) | ローカルリポジトリのブランチ リモートリポジトリの更新情報を保管する |
フェッチ | リモートリポジトリから更新情報を読みこむ 読みこんだリモート追跡ブランチに保管 |
プル | リモートリポジトリのコミットを、ローカルリポジトリに取り込む |
Git をインストール
Mac に Git をインストールします。(Windows はこちら)
git version 2.30.1 (Apple Git-130)
コマンドの使い方
以下の順で Git で利用するコマンドの使い方を紹介します。
設定
--global グローバルオプション
グローバルオプションとは、使用ユーザーの設定です。
git config --global user.name <ユーザー名> でユーザー名を登録します。
git config --global user.email <メールアドレス> でメールアドレスを登録します。
--list 設定の確認
user.name=hoge user.email=test@example.com
init リポジトリを作成
リポジトリとは、ファイルの変更履歴を保存する場所です。
. .. .git
.git フォルダが作成されていることが確認できます。
基本操作
status ワークツリーのステータスを確認
ワークツリーとは、現在ファイルの変更作業をしているディレクトリです。
Untracked files: (use "git add..." to include in what will be committed) test.txt
git が追跡してない "test.txt" ファイルが新しく作成されたことを確認できます。
add ステージング
ステージングとは、ワークツリーのファイルの変更履歴をインデックスに追加することです。
インデックスとは、ファイルの変更履歴を一時的に登録する領域です。
git add <ファイル名> でインデックスにファイルの変更履歴を追加します。
なお、 -A オプションですべてのファイルをステージングできます。
No commits yet Changes to be committed: (use "git rm --cached..." to unstage) new file: test.txt
インデックスに登録できていることが確認できます。
なお、インデックスの内容をローカルリポジトリに反映するには、コミットをします。
commit コミット
コミットとは、インデックスに登録した変更履歴をローカルリポジトリに反映することです。
git commit -m "<好きなコメント>"
nothing to commit, working tree clean
「ローカルリポジトリにコミットした内容」と「ワークツリー」の内容が一致していることが確認できます。
補足:「git commit <ファイル名> -m "<コメント>"」で add と commit を同時にできます。
(-a オプションで全てのファイルを対象)
log コミットログを確認
Author: hoge <test@example.com> Date: Mon Jun 6 15:50:55 2022 +0900 test.txt をコミット
先ほどのコミット内容を確認できます。
diff 変更履歴の差分を確認
git diff で「ローカルリポジトリにコミットした内容」と「ワークツリー」の差分を確認できます。
--- a/test.txt +++ b/test.txt @@ -1 +1,2 @@ test +addMessage
以下のことが読み取れます。
- 「@@ -1」より、変更履歴は変更前の1行目に相当
- 「@@ +1,2」より、変更履歴は変更後の1~2 行目に相当
- 「+addMessage」より、「addMessage」という内容が追加
reset 取り消し
■ステージングの取り消し
git reset <ファイル名> で、指定したファイルのステージングを取り消します。
Changes to be committed: (use "git restore --staged..." to unstage) modified: test.txt
test.txt がステージングされていることが確認できます。
Changes not staged for commit:
ステージングが取り消せたことが確認できます。
■コミットを取り消し
commit xxxxxxxxxxxxxxxxxxxxxxxx (HEAD -> master) Author: hogeDate: Mon Jun 6 16:46:44 2022 +0900 test.txt をコミットその2 commit xxxxxxxxxxxxxxxxxxxxxxxx Author: hoge Date: Mon Jun 6 16:10:49 2022 +0900 test.txt をコミット
"test.txt をコミットその2" のコミットを取り消します。
commit xxxxxxxxxxxxxxxxxxxxxxxx (HEAD -> master) Author: hogeDate: Mon Jun 6 16:10:49 2022 +0900 test.txt をコミット
直前のコミットが取り消され、HEAD (現在作業している場所を示すポインタ) が1回目のコミットに戻っています。
なお、「git reset --hard HEAD^」でコミットもワークツリー内のファイルの変更も取り消します。
checkout ファイルの変更を戻す
チェックアウトとは、ワークツリーにブランチを展開することです。
チェックアウトにより、最後にブランチにコミットした変更履歴に戻します。
test addMessage
git checkout HEAD -- <ファイル名> で最後にコミットした変更履歴に戻します
test
先ほど追加した "addMessage" という変更が消え、コミットした変更履歴に戻っています。
ブランチ操作
ブランチとは、変更履歴を分岐して、複数の変更履歴を作ることです。
稼働中と開発中でブランチを分けることで、稼働中のサービスに影響を与えずに開発側のブランチでソースコードを変更できます。
branch ブランチを作成
git branch <ブランチ名> でブランチを作成します。
branch ブランチの確認
dev * master
作成した dev ブランチを確認できます。master は分岐前のブランチです。
「*」は現在ワークツリーに展開しているブランチです。
checkout ブランチの切替
チェックアウトとは、ワークツリーにブランチを展開することです。
git checkout <ブランチ名> でワークツリーに展開しているブランチを切り替えます。
Switched to branch 'dev'
* dev master
dev に「*」がついているので、ワークツリーに展開しているブランチが変更できています。
merge マージ
マージとは、分岐した2つの変更履歴を1つにする処理です。
test branch
Switched to branch 'dev'
test
dev ブランチでコミットした編集内容が master ブランチには反映されてません。
これは、checkout でブランチを切り替えた時、「リポジトリに最後にコミットされた変更履歴」が「ワークツリー」に展開されるからです。
(dev ブランチで編集した内容は、Master ブランチにコミットしてない)
git merge <ブランチ名> で現在ワークツリーに展開しているブランチに、指定したブランチをマージします。
test branch
dev リポジトリにコミットした内容がマージできています。
-D ブランチの削除
dev ブランチが消えました。
リモートリポジトリ関連の操作
リモートリポジトリとは、サーバー上に作成し、複数人がアクセスできるリポジトリです。
通常は Github にリモートリポジトリを作成します。
clone クローンを作成
クローンとは、リモートリポジトリの複製を、ローカルリポジトリに作成することです。
remote add リモートを追加
git remote add <名前> <リモートリポジトリの URL>
URL で指定したリモートリポジトリに名前をつけ、追加します。
remote -v リモートリポジトリの名前を確認
origin https://example.com (fetch) origin https://example.com (push)
push ローカルからリモート
プッシュとは、ローカルリポジトリのコミットを、リモートリポジトリに渡すことです。
git push <リモートリポジトリの名前> <ブランチ名> でプッシュします。
fetch 更新情報を取得
フェッチとは、リモートリポジトリから更新情報を読みこむことです。
読み込んだ情報は、ローカルリポジトリのリモート追跡ブランチ (origin/master) という場所に保存します。(Master ブランチにはマージしません)
@@ -1 +0,0 @@ -change
pull リモートからローカル
プルとは、リモートリポジトリのコミットを、ローカルリポジトリに取り込むことです。
なお、pull は差分を取得、clone は全て取得です。
git pull <リモートリポジトリ名> <ブランチ名> でプルします。
pull は内部的にリモートリポジトリからフェッチし、リモート追跡ブランチと master ブランチをマージしています。(以下のコマンドと同じ意味です)
- $ git fetch origin master
- $ git merge origin/master