Git 入門トップページ


目次

  1. インストール
  2. 環境設定
  3. はじめてのバージョン管理
    1. ここでのストーリー
    2. myReportプロジェクトを作成する
    3. chap1.txtを作成する
    4. ファイルの中身を確認する
    5. コミットしてみよう
    6. 編集して再度コミットしてみよう
    7. さらに編集しつつ,新しいファイルも追加しよう
    8. コミットログを確認する
    9. 編集して上書き保存してしまったが元に戻したい
    10. 編集してコミットしたが元に戻したい

Git によるバージョン管理入門 (Linux / Mac)

はじめてのバージョン管理

ここでは,簡単なバージョン管理を行ってみて,バージョン管理がどのようなものなのかを考えよう.

目次に戻る

ここでのストーリー

ここでは,「myReport」というプロジェクトに,「chap1.txt」と「chap2.txt」という2種類のテキストファイルを作成して,バージョン管理を行ってみる.まず,「chap1.txt」に数行の文章を作成し,Gitにコミットする(つまり,バージョン管理システムに登録する).その後,「chap2.txt」にも数行の文章を作成し,コミットする.さらに,「chap1.txt」や「chap2.txt」を編集してコミットしたり,編集を取り消して以前の状態に戻ったりする.

目次に戻る

myReportプロジェクトを作成する

Git で管理したいフォルダを作成し,そのフォルダに移動して git init を実行すると良い.

例えば,/home/GakuinHana/Documents/ フォルダ に 「myReport」フォルダを作成して,git init を実行してみよう.なお,myReport フォルダは Mac の Finder を使って作成しても良い.また git プロジェクトを作成(初期化)すると,「.git」という名称の隠しフォルダが作成される.

[GakuinHana@rin06 ~]$ pwd ⏎ # カレントフォルダを確認する (Print Working Directory)
/home/students/GakuinHana
[GakuinHana@rin06 ~]$ ls ⏎ # フォルダとファイルの一覧を確認
Documents  public_html  readme.txt
[GakuinHana@rin06 ~]$ cd Documents/ ⏎ # Documents フォルダ(ディレクトリ)に移動する (Change Directory)
[GakuinHana@rin06 Documents]$ mkdir myReport ⏎ # myReport フォルダ(ディレクトリ)を作成する (MaKe DIRectory)
[GakuinHana@rin06 Documents]$ cd myReport ⏎ # myReport フォルダに移動する
[GakuinHana@rin06 myReport]$ pwd ⏎ # (念の為)カレントフォルダを確認する
/home/students/GakuinHana/Documents/myReport
[GakuinHana@rin06 myReport]$ ls -la ⏎ # 隠しフォルダ(ファイル)も含めて一覧表示
合計 8
drwxrwxr-x 2 GakuinHana GakuinHana 4096  3月 22 09:59 .
drwx------ 4 GakuinHana GakuinHana 4096  3月 22 09:59 ..
[GakuinHana@rin06 myReport]$ git init ⏎ # git のプロジェクトを作成(初期化)する
Initialized empty Git repository in /home/students/GakuinHana/Documents/myReport/.git/
[GakuinHana@rin06 myReport]$ ls -la ⏎ # ファイルの確認(.git という隠しフォルダが作成された)
合計 12
drwxrwxr-x 3 GakuinHana GakuinHana 4096  3月 22 09:59 .
drwx------ 4 GakuinHana GakuinHana 4096  3月 22 09:59 ..
drwxrwxr-x 7 GakuinHana GakuinHana 4096  3月 22 09:59 .git
[GakuinHana@rin06 myReport]$

目次に戻る

chap1.txtを作成する

まずは,myReport フォルダに「chap1.txt」ファイルを作成する.次のように touch コマンドで新規ファイルを作成しても良いし,任意のテキストエディタ (Visual Studio Code, Atom, Vim など) を使って次のようなテキストファイルを作成してもよい.なお,Windows上の秀丸エディタやメモ帳を利用する場合には「文字コード」に「Unicode (UTF-8)」を指定して保存するようにしてください.

[GakuinHana@rin06 myReport]$ pwd ⏎ # (念の為)カレントフォルダを確認する
/home/students/GakuinHana/Documents/myReport
[GakuinHana@rin06 myReport]$ touch chap1.txt ⏎ # 新規ファイルを作成する
[GakuinHana@rin06 myReport]$ ls -l ⏎ # フォルダとファイルの一覧を確認
合計 0
-rw-rw-r-- 1 GakuinHana GakuinHana 0  3月 22 10:01 chap1.txt
[GakuinHana@rin06 myReport]$ ls -la ⏎ # 隠しフォルダ(ファイル)も含めて一覧表示
合計 12
drwxrwxr-x 3 GakuinHana GakuinHana 4096  3月 22 10:01 .
drwx------ 4 GakuinHana GakuinHana 4096  3月 22 09:59 ..
drwxrwxr-x 7 GakuinHana GakuinHana 4096  3月 22 09:59 .git
-rw-rw-r-- 1 GakuinHana GakuinHana    0  3月 22 10:01 chap1.txt
[GakuinHana@rin06 myReport]$

任意のエディタを使って chap1.txt ファイルを作成する.

chap1.txt
Gitのお勉強
神戸学院大学
林坂ゼミ

目次に戻る

ファイルの中身を確認する

コマンド cat を使って,作成したファイルの内容を確認してみる.

[GakuinHana@rin06 myReport]$ ls -la ⏎
合計 16
drwxrwxr-x 3 GakuinHana GakuinHana 4096  3月 22 10:02 .
drwx------ 4 GakuinHana GakuinHana 4096  3月 22 09:59 ..
drwxrwxr-x 7 GakuinHana GakuinHana 4096  3月 22 09:59 .git
-rw-rw-r-- 1 GakuinHana GakuinHana   49  3月 22 10:02 chap1.txt
[GakuinHana@rin06 myReport]$ cat chap1.txt ⏎
Gitのお勉強
神戸学院大学
林坂ゼミ

[GakuinHana@rin06 myReport]$

目次に戻る

コミットしてみよう

保存ができれば,実際にコミット(登録)してみよう.Git ではプロジェクトフォルダに保存されたファイルがすべて管理対象に含まれる(.gitignore ファイルを使って指定したファイルを管理対象から除くことも可能).管理対象のファイルで変更されたファイルを確認し,コミットしたいファイルはgit add ファイル名コマンドによって「ステージングエリア」に登録する.その後,git commit -m"メッセージ" によってコミットする.

[GakuinHana@rin06 myReport]$ pwd ⏎ # (念の為)カレントフォルダを確認する
/home/students/GakuinHana/Documents/myReport
[GakuinHana@rin06 myReport]$ ls -l ⏎ # ファイルの一覧を確認
合計 4
-rw-rw-r-- 1 GakuinHana GakuinHana 49  3月 22 10:02 chap1.txt
[GakuinHana@rin06 myReport]$ cat chap1.txt ⏎ # ファイルの中身を確認
Gitのお勉強
神戸学院大学
林坂ゼミ

[GakuinHana@rin06 myReport]$ git status ⏎ # トラックされていない(新しいファイル)がある
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#	chap1.txt
nothing added to commit but untracked files present (use "git add" to track)
[GakuinHana@rin06 myReport]$ git add chap1.txt ⏎ # ファイルをステージングエリアにアップする
[GakuinHana@rin06 myReport]$ git status ⏎ # コミットの準備ができていることを確認する
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#	new file:   chap1.txt
#
[GakuinHana@rin06 myReport]$ git commit -m "initial commit" ⏎ # コミットしてみる
[master (root-commit) c522a6a] initial commit
 1 file changed, 4 insertions(+)
 create mode 100644 chap1.txt
[GakuinHana@rin06 myReport]$ git log ⏎ # コミットログを確認する
commit c522a6a315427eb423d6646ac5de01db22476dd2
Author: Gakuin Hanako <gakuin.hanako@dummy.kobegakuin.ac.jp>
Date:   Mon Mar 22 10:03:37 2021 +0900

    initial commit
[GakuinHana@rin06 myReport]$

目次に戻る

編集して再度コミットしてみよう

chap1.txt ファイルに行を追加して,もう一度コミットしてみよう.

chap1.txt の最後に1行追加してみる.

chap1.txt
Gitのお勉強
神戸学院大学
林坂ゼミ
自宅でのリモートワーク

確認してコミットする.

[GakuinHana@rin06 myReport]$ cat chap1.txt ⏎ # ファイルの内容を確認
Gitのお勉強
神戸学院大学
林坂ゼミ
自宅でのリモートワーク

[GakuinHana@rin06 myReport]$ git status ⏎ # chap1.txt が修正(modify)されたことが分かる
# On branch master
# 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:   chap1.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
[GakuinHana@rin06 myReport]$ git diff ⏎ # どこが変わったかの差分を確認する
diff --git a/chap1.txt b/chap1.txt
index eaebd8d..84ac15d 100644
--- a/chap1.txt
+++ b/chap1.txt
@@ -1,4 +1,5 @@
 Gitのお勉強
 神戸学院大学
 林坂ゼミ
+自宅でのリモートワーク

[GakuinHana@rin06 myReport]$ git add chap1.txt ⏎ # ファイルをステージングエリアにアップ
[GakuinHana@rin06 myReport]$ git commit -m "1行追加" ⏎ # コミット
[master d40ba8a] 1行追加
 1 file changed, 1 insertion(+)
[GakuinHana@rin06 myReport]$ git log ⏎ # ログの確認(2つのコミットがあることが分かる)
commit d40ba8a20bcd168c0d01257985872a55365dccc0
Author: Gakuin Hanako <gakuin.hanako@dummy.kobegakuin.ac.jp>
Date:   Mon Mar 22 10:04:55 2021 +0900

    1行追加

commit c522a6a315427eb423d6646ac5de01db22476dd2
Author: Gakuin Hanako <gakuin.hanako@dummy.kobegakuin.ac.jp>
Date:   Mon Mar 22 10:03:37 2021 +0900

    initial commit
[GakuinHana@rin06 myReport]$

目次に戻る

さらに編集しつつ,新しいファイルも追加しよう

chap1.txt をさらに編集しつつ,新しいファイル chap2.txt も追加してみよう.

まず,chap1.txtの2行目に文字を追加,3行目を削除,最後の行を追加してみる.

chap1.txt
Gitのお勉強
神戸学院大学経営学部
自宅でのリモートワーク
ポートアイランドキャンパス

また,chap2.txt を作成し,次のような文章を入力してみる.

chap2.txt
Linux や Mac を使って Git を勉強しよう
将来的には Python Django や Laravel のバージョン管理をやりたい

2つのファイルを一気にまとめてコミットする.なお,複数のファイルをステージングエリアにアップするとき,git add ファイル名 を何度も入力するのが大変であるが,git add . で変更されたファイルをすべてアップすることができる.

[GakuinHana@rin06 myReport]$ cat chap1.txt ⏎ # ファイルの内容を閲覧
Gitのお勉強
神戸学院大学経営学部
自宅でのリモートワーク
ポートアイランドキャンパス

[GakuinHana@rin06 myReport]$ cat chap2.txt ⏎ # ファイルの内容を閲覧
Linux や Mac を使って Git を勉強しよう
将来的には Python Django や Laravel のバージョン管理をやりたい

[GakuinHana@rin06 myReport]$ git status ⏎ # chap1.txtが編集され,新しいファイル(chap2.txt)がある
# On branch master
# 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:   chap1.txt
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#	chap2.txt
no changes added to commit (use "git add" and/or "git commit -a")
[GakuinHana@rin06 myReport]$ git add . ⏎ # すべての(編集・新規)ファイルをステージングエリアにアップする
[GakuinHana@rin06 myReport]$ git status ⏎ # コミット前に状態を確認する
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	modified:   chap1.txt
#	new file:   chap2.txt
#
[GakuinHana@rin06 myReport]$ git commit -m "chap1修正とchap2追加" ⏎ # コミットする
[master 167ee2a] chap1修正とchap2追加
 2 files changed, 5 insertions(+), 2 deletions(-)
 create mode 100644 chap2.txt
[GakuinHana@rin06 myReport]$

目次に戻る

コミットログを確認する

コミットが蓄積されたので,ログを確認してみよう.

git log ではコミットのid, 作業者名,日時とコミットメッセージの一覧を確認できる.なお,コミットには 167ee2a96eb26b361f5bba2451cbd9cbd7b15c9a のようなハッシュ値を用いたidが付与されていることに注意しよう.

[GakuinHana@rin06 myReport]$ git log ⏎
commit 167ee2a96eb26b361f5bba2451cbd9cbd7b15c9a
Author: Gakuin Hanako <gakuin.hanako@dummy.kobegakuin.ac.jp>
Date:   Mon Mar 22 10:15:47 2021 +0900

    chap1修正とchap2追加

commit d40ba8a20bcd168c0d01257985872a55365dccc0
Author: Gakuin Hanako <gakuin.hanako@dummy.kobegakuin.ac.jp>
Date:   Mon Mar 22 10:04:55 2021 +0900

    1行追加

commit c522a6a315427eb423d6646ac5de01db22476dd2
Author: Gakuin Hanako <gakuin.hanako@dummy.kobegakuin.ac.jp>
Date:   Mon Mar 22 10:03:37 2021 +0900

    initial commit
[GakuinHana@rin06 myReport]$

コミットのidとメッセージだけを表示したい場合は git log --oneline を使えば良い.このとき,コミットIDは先頭から7桁だけが表示されている(コミットIDを指定する場合も7桁程度を指定するだけで良い).

[GakuinHana@rin06 myReport]$ git log --oneline ⏎
167ee2a chap1修正とchap2追加
d40ba8a 1行追加
c522a6a initial commit
[GakuinHana@rin06 myReport]$

コミットの内容を詳細に表示したければ,git log -p のように -p オプションを指定する.このとき,すべての情報が一気に表示できない場合は,上下のカーソルキーやスペースキーでスクロールできる.また終了するには「Q」キーを押すと良い.

[GakuinHana@rin06 myReport]$ git log -p ⏎
commit 167ee2a96eb26b361f5bba2451cbd9cbd7b15c9a
Author: Gakuin Hanako <gakuin.hanako@dummy.kobegakuin.ac.jp>
Date:   Mon Mar 22 10:15:47 2021 +0900

    chap1修正とchap2追加

diff --git a/chap1.txt b/chap1.txt
index 84ac15d..58bd40e 100644
--- a/chap1.txt
+++ b/chap1.txt
@@ -1,5 +1,5 @@
 Gitのお勉強
-神戸学院大学
-林坂ゼミ
+神戸学院大学経営学部
 自宅でのリモートワーク
+ポートアイランドキャンパス

diff --git a/chap2.txt b/chap2.txt
new file mode 100644
index 0000000..171da6a
--- /dev/null
+++ b/chap2.txt
@@ -0,0 +1,3 @@
+Linux や Mac を使って Git を勉強しよう
+将来的には Python Django や Laravel のバージョン管理をやりたい
+

commit d40ba8a20bcd168c0d01257985872a55365dccc0
Author: Gakuin Hanako <gakuin.hanako@dummy.kobegakuin.ac.jp>
Date:   Mon Mar 22 10:04:55 2021 +0900

    1行追加

diff --git a/chap1.txt b/chap1.txt
index eaebd8d..84ac15d 100644
--- a/chap1.txt
+++ b/chap1.txt
@@ -1,4 +1,5 @@
 Gitのお勉強
 神戸学院大学
 林坂ゼミ
+自宅でのリモートワーク


commit c522a6a315427eb423d6646ac5de01db22476dd2
Author: Gakuin Hanako <gakuin.hanako@dummy.kobegakuin.ac.jp>
Date:   Mon Mar 22 10:03:37 2021 +0900

    initial commit

diff --git a/chap1.txt b/chap1.txt
new file mode 100644
index 0000000..eaebd8d
--- /dev/null
+++ b/chap1.txt
@@ -0,0 +1,4 @@
+Gitのお勉強
+神戸学院大学
+林坂ゼミ
+
[GakuinHana@rin06 myReport]$

最新の2件のコミットを表示する.

[GakuinHana@rin06 myReport]$ git log -2 ⏎
commit 167ee2a96eb26b361f5bba2451cbd9cbd7b15c9a
Author: Gakuin Hanako <gakuin.hanako@dummy.kobegakuin.ac.jp>
Date:   Mon Mar 22 10:15:47 2021 +0900

    chap1修正とchap2追加

commit d40ba8a20bcd168c0d01257985872a55365dccc0
Author: Gakuin Hanako <gakuin.hanako@dummy.kobegakuin.ac.jp>
Date:   Mon Mar 22 10:04:55 2021 +0900

    1行追加
[GakuinHana@rin06 myReport]$

最新の1件のコミットを詳細に表示する.

[GakuinHana@rin06 myReport]$ git log -1 -p ⏎
commit 167ee2a96eb26b361f5bba2451cbd9cbd7b15c9a
Author: Gakuin Hanako <gakuin.hanako@dummy.kobegakuin.ac.jp>
Date:   Mon Mar 22 10:15:47 2021 +0900

    chap1修正とchap2追加

diff --git a/chap1.txt b/chap1.txt
index 84ac15d..58bd40e 100644
--- a/chap1.txt
+++ b/chap1.txt
@@ -1,5 +1,5 @@
 Gitのお勉強
-神戸学院大学
-林坂ゼミ
+神戸学院大学経営学部
 自宅でのリモートワーク
+ポートアイランドキャンパス

diff --git a/chap2.txt b/chap2.txt
new file mode 100644
index 0000000..171da6a
--- /dev/null
+++ b/chap2.txt
@@ -0,0 +1,3 @@
+Linux や Mac を使って Git を勉強しよう
+将来的には Python Django や Laravel のバージョン管理をやりたい
+
[GakuinHana@rin06 myReport]$

目次に戻る

編集して上書き保存してしまったが元に戻したい

コミットのあとにいろいろ編集して上書き保存をしたが,やっぱり直前のコミットの状態に戻りたい(プログラムを書き換えたがエラーで動かなくなってしまったのでとりあえず動く状態まで戻したい,など).

Gitのようなバージョン管理システムを使っておれば非常に簡単である.3つのコミットまでできた状態からスタートしよう.まず,chap1.txtの中身を確認する.

[GakuinHana@rin06 myReport]$ cat chap1.txt ⏎ # 編集前の状態
Gitのお勉強
神戸学院大学経営学部
自宅でのリモートワーク
ポートアイランドキャンパス

[GakuinHana@rin06 myReport]$

次に,chap1.txt を適当に変更して上書き保存してみよう.保存が終われば,typeコマンドで中身を確認してみる.

[GakuinHana@rin06 myReport]$ cat chap1.txt ⏎ # 3行目を書き換えた
Gitのお勉強
神戸学院大学経営学部経営学科
ポートアイランドキャンパス
D号館3階の情報処理実習室

[GakuinHana@rin06 myReport]$

上のように編集して保存してしまったが,やはり,編集した内容を取り消したい.コミットする前であれば git checkout ファイル名 で戻すことができる.

[GakuinHana@rin06 myReport]$ cat chap1.txt ⏎ # 3行目を書き換えた状態
Gitのお勉強
神戸学院大学経営学部経営学科
ポートアイランドキャンパス
D号館3階の情報処理実習室

[GakuinHana@rin06 myReport]$ git status ⏎ # chap1.txt が編集済み
# On branch master
# 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:   chap1.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
[GakuinHana@rin06 myReport]$ git checkout chap1.txt ⏎ # 編集内容を取り消す
[GakuinHana@rin06 myReport]$ git status ⏎ # 元に戻っている
# On branch master
nothing to commit, working directory clean
[GakuinHana@rin06 myReport]$ cat chap1.txt ⏎ # ファイルの内容も元に戻っている
Gitのお勉強
神戸学院大学経営学部
自宅でのリモートワーク
ポートアイランドキャンパス

[GakuinHana@rin06 myReport]$

目次に戻る

編集してコミットしたが元に戻したい

編集してコミットしたけれども,直前のコミットや以前のコミットの状態に戻したいということもある.ここでは,2つのファイルをそれぞれ編集,コミットして,元に戻してみよう.

まず,現在の状態を確認する.コミットが3つあることを確認し,それぞれのファイルの内容も確認しておく.

[GakuinHana@rin06 myReport]$ ls -l ⏎ # 
合計 8
-rw-rw-r-- 1 GakuinHana GakuinHana 122  3月 22 10:19 chap1.txt
-rw-rw-r-- 1 GakuinHana GakuinHana 133  3月 22 10:14 chap2.txt
[GakuinHana@rin06 myReport]$ git log --oneline ⏎ # 
167ee2a chap1修正とchap2追加
d40ba8a 1行追加
c522a6a initial commit
[GakuinHana@rin06 myReport]$ cat chap1.txt ⏎ # 
Gitのお勉強
神戸学院大学経営学部
自宅でのリモートワーク
ポートアイランドキャンパス

[GakuinHana@rin06 myReport]$ cat chap2.txt ⏎ # 
Linux や Mac を使って Git を勉強しよう
将来的には Python Django や Laravel のバージョン管理をやりたい

[GakuinHana@rin06 myReport]$

次に,2つのファイルそれぞれに行を追加する編集をしてみる.

[GakuinHana@rin06 myReport]$ git status ⏎ # 2つのファイルが更新されていることを確認する
# On branch master
# 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:   chap1.txt
#	modified:   chap2.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
[GakuinHana@rin06 myReport]$ git diff ⏎ # 更新内容の差分を確認
diff --git a/chap1.txt b/chap1.txt
index 58bd40e..583be96 100644
--- a/chap1.txt
+++ b/chap1.txt
@@ -1,5 +1,6 @@
 Gitのお勉強
 神戸学院大学経営学部
+間違った編集をしてみる
 自宅でのリモートワーク
 ポートアイランドキャンパス

diff --git a/chap2.txt b/chap2.txt
index 171da6a..8f36dfd 100644
--- a/chap2.txt
+++ b/chap2.txt
@@ -1,3 +1,4 @@
 Linux や Mac を使って Git を勉強しよう
+バグを埋め込んでみる
 将来的には Python Django や Laravel のバージョン管理をやりたい

[GakuinHana@rin06 myReport]$

2つのファイルをそれぞれ順番にコミットする.なお,誤ってステージングエリアにアップしてしまった場合は get reset HEAD ファイル名 でステージングエリアから取り除くことができる.

[GakuinHana@rin06 myReport]$ git status ⏎ # 再度状態を確認する
# On branch master
# 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:   chap1.txt
#	modified:   chap2.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
[GakuinHana@rin06 myReport]$ git add . ⏎ # すべての更新ファイルをステージングエリアにアップする
[GakuinHana@rin06 myReport]$ git status ⏎ # 間違ってchap2.txtもステージングエリアにアップしてしまった
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	modified:   chap1.txt
#	modified:   chap2.txt
#
[GakuinHana@rin06 myReport]$ git reset HEAD chap2.txt ⏎ # chap2.txt をステージングエリアから取り除く
Unstaged changes after reset:
M	chap2.txt
[GakuinHana@rin06 myReport]$ git status ⏎ # chap1.txt だけがステージングエリアにアップされている
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	modified:   chap1.txt
#
# 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:   chap2.txt
#
[GakuinHana@rin06 myReport]$ git commit -m "chap1.txtを編集" ⏎ # chap1.txtだけをコミット
[master e0f5ae7] chap1.txtを編集
 1 file changed, 1 insertion(+)
[GakuinHana@rin06 myReport]$ git add chap2.txt ⏎ # chap2.txt をステージングエリアにアップ
[GakuinHana@rin06 myReport]$ git commit -m "chap2.txtを編集" ⏎ # chap2.txt をコミット
[master eee4e83] chap2.txtを編集
 1 file changed, 1 insertion(+)
[GakuinHana@rin06 myReport]$ git log --oneline ⏎ # 2つのコミットが追加された
eee4e83 chap2.txtを編集
e0f5ae7 chap1.txtを編集
167ee2a chap1修正とchap2追加
d40ba8a 1行追加
c522a6a initial commit
[GakuinHana@rin06 myReport]$

2つのコミットを行ったので,内容を確認してみよう.

[GakuinHana@rin06 myReport]$ git log -p -2 ⏎ # 
commit eee4e839a225c964083bb4b1f4a500a917881d61
Author: Gakuin Hanako <gakuin.hanako@dummy.kobegakuin.ac.jp>
Date:   Mon Mar 22 10:23:03 2021 +0900

    chap2.txtを編集

diff --git a/chap2.txt b/chap2.txt
index 171da6a..8f36dfd 100644
--- a/chap2.txt
+++ b/chap2.txt
@@ -1,3 +1,4 @@
 Linux や Mac を使って Git を勉強しよう
+バグを埋め込んでみる
 将来的には Python Django や Laravel のバージョン管理をやりたい


commit e0f5ae7e5629b3424720d5376ef7a5c021fd7738
Author: Gakuin Hanako <gakuin.hanako@dummy.kobegakuin.ac.jp>
Date:   Mon Mar 22 10:22:43 2021 +0900

    chap1.txtを編集

diff --git a/chap1.txt b/chap1.txt
index 58bd40e..583be96 100644
--- a/chap1.txt
+++ b/chap1.txt
@@ -1,5 +1,6 @@
 Gitのお勉強
 神戸学院大学経営学部
+間違った編集をしてみる
 自宅でのリモートワーク
 ポートアイランドキャンパス

[GakuinHana@rin06 myReport]$

しかしながら,先程の編集に問題があったことがわかったので,コミット 167ee2a の状態に戻したい.なお,コミットには 167ee2a96eb26b361f5bba2451cbd9cbd7b15c9a のようなIDが付けられているが,git reset などでコミットIDを指定する際には,IDを先頭から7桁程度コピーして指定すれば良い.

[GakuinHana@rin06 myReport]$ git log --oneline ⏎ # ログの一覧を表示し,どのコミットまで戻るかを考える
eee4e83 chap2.txtを編集
e0f5ae7 chap1.txtを編集
167ee2a chap1修正とchap2追加
d40ba8a 1行追加
c522a6a initial commit
[GakuinHana@rin06 myReport]$ git reset --hard 167ee2a ⏎ # 特定のコミットまで戻る
HEAD is now at 167ee2a chap1修正とchap2追加
[GakuinHana@rin06 myReport]$ git status ⏎ # 作業ディレクトリはクリーンな状態
# On branch master
nothing to commit, working directory clean
[GakuinHana@rin06 myReport]$ git log --oneline ⏎ # コミットログは希望のコミットまで戻っている
167ee2a chap1修正とchap2追加
d40ba8a 1行追加
c522a6a initial commit
[GakuinHana@rin06 myReport]$ cat chap1.txt ⏎ # ファイルの内容も元に戻っている
Gitのお勉強
神戸学院大学経営学部
自宅でのリモートワーク
ポートアイランドキャンパス

[GakuinHana@rin06 myReport]$ cat chap2.txt ⏎ # ファイルの内容も元に戻っている
Linux や Mac を使って Git を勉強しよう
将来的には Python Django や Laravel のバージョン管理をやりたい

[GakuinHana@rin06 myReport]$

Python Django, Laravel などを用いたシステム開発では,Gitのバージョン管理を用いて概ね次の手順を繰り返していくことになる.

  1. ソースファイルを編集する
  2. テストを実施してバグがないことを確認する
  3. Gitでコミットする

これにより,もしも変な編集をしてシステムが起動しなくなっても,動作するバージョンにいつでも戻ることができる.また,いつでも戻れるという安心感があるので,思い切ったコードの変更やリファクタリングを行うこともできるようになる.