リポジトリ作成から基本的なコミットの方法
gitをコマンドラインで利用するチュートリアル的な演習の第1部です。1
この文書ではgit init
、git status
、git add
などを使った単純なコミットまでの演習、ファイルの状態やワークフローについての解説などを取り扱っています。
この文書ではgitをコマンドラインで利用するための環境構築については触れていません。(ご参考までに私の環境構築ログ)
参考サイト
-
gitドキュメント (原文はこちら)
pdfやepub形式のダウンロードもあります。日本語に翻訳されています。 -
Git ユーザマニュアル (バージョン 1.5.3 以降用)
日本語訳されたユーザマニュアル -
Git入門編1:Gitの基本操作を身に付けよう
paiza提供の講座。2講座無料視聴できます。初期設定からripositoryを作るまでの流れが動画で説明されています。
仮想ターミナルが用意されているため環境構築なしにgitやshellコマンドを試すことができます。 -
GitHub Git チートシート
クイックリファレンスのようなまとめシート。 -
Chapter 12. 付録A:Git Quick Reference
Git ユーザマニュアル (バージョン 1.5.3 以降用)に掲載されているクイックリファレンス。
[演習1] ユーザ識別情報を登録する
参考
1.6 Getting Started - First-Time Git Setupの Your Identity (日本語訳)
GitHub Git チートシートの ツールの設定
gitを使い始める際に一番最初に行う設定です。
commitなどを行ったときにAuthorとして記録される情報を登録します。
~$ git config --global user.name "KaoriTakinami"
~$ git config --global user.email "61788460+KaoriKoba@users.noreply.github.com"
githubを利用されている方へのTips
もし、将来的にローカルリポジトリを github へ移行したい場合は、ここで指定するメールアドレスをgithubで用意されている公開用のメールアドレスにする事をお勧めします。
プライベートなアドレスを指定した場合、githubへの remote pushの際に "プライベートなメールアドレスが公開されてしまう" という旨の警告が出されエラーとなります。
プライベートなメールアドレスを利用してコミットなどのlogを残したリポジトリをgithubへpushする場合はgithub側のメール設定で
Block command line pushes that expose my email
をオフにする必要があります。
※ チュートリアル演習1~4にはローカルリポジトリからgithubへpushする内容は含みませんので、演習を行うだけであればどのようなアドレスを設定しても問題はありません。
[演習2] リポジトリを作ろう
まず、プロジェクトのフォルダを作成し、その中にgitのローカルリポジトリを作成します。
[演習2-1] 演習用の準備・プロジェクト用ディレクトリの作成 2
command コードブロック内に表示しているコマンドプロンプトは
カレントディレクトリ$
です。
演習用のディレクトリを用意します。mkdir git_prac
そのディレクトリの中にプロジェクト用のディレクトリを用意します。mkdir proj
さらにその下に今回のチュートリアル用のディレクトリを作成します。mkdir tutorial
3
~$ mkdir git_prac
~$ cd git_prac
~/git_prac$ mkdir proj
~/git_prac$ cd proj
~/git_prac/proj$ mkdir tutorial
~/git_prac/proj$ cd tutorial
[演習2-2] リポジトリを作成する
作成したtutorialディレクトリ内でgit init
をすることで、カレントディレクトリ内のファイルがgitの管理下におかれる準備ができます。
具体的にはカレントディレクトリ内に .git という名のサブディレクトリが作成されます。
~/git_prac/proj/tutorial$ git init
Initialized empty Git repository in /home/user/git_practice/project/.git/
この時点でカレントディレクトリ内にファイルがあってもリポジトリに登録(コミットやステージングなど)されたりはしません。
[演習3] 状態について知ろう
リポジトリにファイルを登録する前にgitの世界での管理のための、ファイルの状態と、3つの状態(ワークフロー)と、その状態を確認するコマンドgit status
を紹介します。
この項目は長く難解な説明になっています。
git status
で表示される内容を理解するには必要な情報ですが、この項目を飛ばして [演習3-2] リポジトリの状態を確認しよう 以降を進め、適宜この項目を参照していただいても構いません。
[演習3-1] gitの管理下でのファイルの状態とgitのワークフローについて
ファイルの状態や、編集から履歴登録までのワークフローなどを解説します。
gitのファイルの状態
参考
2.2 Git Basics - Recording Changes to the Repository (日本語訳)
この項目の日本語訳は少し難解なのでよくわからない場合は原文を参照したほうが理解しやすいかもしれません。
難解かもしれない部分
1.3 使い始める - Gitの基本の`三つの状態`の項Gitは、ファイルが帰属する、`コミット済、修正済、ステージ済`の、三つの主要な状態を持ちます。この訳は挿絵と語順があっていないので理解の妨げとなるかもしれません。原文もご覧ください。
Git has three main states that your files can reside in: `modified, staged, and committed`:
上記参考文献の要約
リポジトリを作成したりチェックアウトしたディレクトリ内のファイルは2つのどちらかになっている。
- tracked (追跡されている)
- untracked (追跡されてない)
tracked (追跡されている) ファイルがリポジトリで履歴管理対象のファイル。
tracked(追跡されている) ファイルは以下の状態になる。
gitで履歴管理を始める時は untracked のファイルを tracked にする事から始まります。
管理されていないファイルをリポジトリに登録する
- まず、untracked (追跡されてない) ファイルを
git add
して staged (ステージされている) にします。4 - コミット
git commit
する。コミットすることでそのファイルの変更履歴がリポジトリに記録されます。
untracked のファイルを tracked にできたら、その後のファイルの状態は大抵以下のような流れなります。上記の図を参照しながらご確認ください。
管理されているファイルを更新したときのファイルの状態変化
- unmodified (変更されていない=リポジトリに登録されている内容と一致している)
- 編集すると modified (変更されている) の状態になります。
-
git add
を行い staged (ステージされている) の状態へ4 - コミット
git commit
して変更履歴を記録します。 - コミットを終えたファイルは unmodified になり1の状態へ戻ります。
リポジトリにコミットするまでのワークフロー(各段階の呼称)
上記参考文献の要約
gitには主に3つの状態がある
- modified (修正済) -- ファイルを変更したが、まだデータベースにコミットしていない状態
- staged (ステージ済) -- 変更されたファイルの現在のバージョンを次のコミットのスナップショットに含めることをマークした状態(インデックス)
- committed (コミット済) -- データが安全にローカルデータベースに保存された状態
この状態はgitの3つのセクションになる
基本的なGitのワークフローは次のようになります。上記の図を参照しながらご確認ください。
基本的なGitのワークフロー
- ワーキングツリー 5 内のファイルを編集(変更)。
- 次のコミットに含める変更済みファイルを選択してステージング
git add
。これにより、ステージングエリア には選択された変更のみが追加されます。 - コミット
git commit
を行う。コミットすることでステージングエリアのファイルがそのスナップショットとして .gitディレクトリ(リポジトリ) に保存されます。
[演習3-2] リポジトリの状態を確認しよう
次に紹介するコマンドはワーキングツリー内のファイルがどんな状態にあるのかを確認できるコマンドgit sattus
です。
ワーキングツリーとは簡単に言うと git init
や git checkout
を行ったディレクトリの事です。つまり .git ディレクトリが格納されているディレクトリです。
git init
したばかりのディレクトリでgit status
します。
~/git_prac/proj/tutorial$ git status
On branch master
nothing to commit, working tree clean
以降の演習では適宜git status
を使い、どのように状態が変化するかを説明しながらすすめます。
[演習4] リポジトリにファイルを登録しよう(ステージング)
登録するファイルを用意します。
~/git_prac/proj/tutorial$ echo "this is a test." >> test.txt
状態を確認git status
するとtest.txtがUntracked file6であることがわかります。
git status
で表示されるメッセージでも コミットに加えるものはないけどトラックしていないファイルがあると教えてくれます。
~/git_prac/proj/tutorial$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
test.txt
nothing added to commit but untracked files present (use "git add" to track)
コミットに含めるためにtset.txtをステージングします。ステージングするコマンドはgit add
です。
~/git_prac/proj/tutorial$ git add test.txt
状態を確認git status
してみると新しいファイルがステージングされたことがわかります。
~/git_prac/proj/tutorial$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: test.txt
[演習5] リポジトリにファイルを登録しよう(コミット)
コミットgit commit
は、変更履歴をリポジトリに記録するためのコマンドです。
コミットする際には変更に関する簡単な説明を付加します。メッセージといいます。
メッセージは-m
で指定できます。プロジェクト最初のコミットメッセージは "Initial commit" とし、プロジェクトの概要などを記すようです。
~/git_prac/proj/tutorial$ git commit -m "Initial commit"
[master (root-commit) 1866c44] Initial commit
1 file changed, 1 insertion(+)
create mode 100644 test.txt
状態を確認してみましょう
~/git_prac/proj/tutorial$ git status
On branch master
nothing to commit, working tree clean
更新されるものもなく、ワーキングツリーはきれいな状態のようです。
リポジトリに登録した履歴を確認するコマンドにgit log
があります。
~/git_prac/proj/tutorial$ git log
Author: KaoriTakinami <KaoriTakinami@foo.bar>
Date: Thu Apr 27 19:23:43 2023 +0900
Initial commit
[演習1] ユーザ識別情報を登録する で登録した情報でコミットされていることが確認できます。
[演習6] ファイルを更新してコミットする
tracked のファイル(test.txt)を更新してコミットしましょう。
今回はステージングgit add
を省略してコミットする方法git commit -a
を紹介します。
~/git_prac/proj/tutorial$ echo "plz ignore." >> test.txt
~/git_prac/proj/tutorial$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: test.txt
no changes added to commit (use "git add" and/or "git commit -a")
~/git_prac/proj/tutorial$ git commit -a -m "追加の変更"
[master caf0c0b] 追加の変更
1 file changed, 1 insertion(+)
[演習7] プロジェクトに新しくファイルを追加しよう
新しくファイルを追加してみましょう。
tmpという名前のファイルを作成します。touch tmp
~/git_prac/proj/tutorial$ touch tmp
~/git_prac/proj/tutorial$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
tmp
nothing added to commit but untracked files present (use "git add" to track)
コミットの際に、git add
を省略してステージングを行う方法git commit -a
を演習6で紹介しましたが、untrackedのファイルは自動的にステージングしない ので、新しいファイルを登録する場合はgit add
を省略できません。
新しくファイルを追加する場合はgit add
した後、git commit
します。
~/git_prac/proj/tutorial$ git add tmp
~/git_prac/proj/tutorial$ git commit -m "temporary file の追加"
[master db39370] temporary file の追加
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 tmp
一度追加した後は、git add
を省略してgit commit -a
を利用することができます。
ここまでの内容で [演習3-1] gitの管理下でのファイルの状態とgitのワークフローについて で紹介したファイルの状態や3つのセクションについて具体的な利用例を紹介しました。
次のGitのチュートリアル演習 2ではステージングが存在する理由を実感できるような演習になればと思います。