Gitの基礎練習

結城浩

バージョン管理ツールGitの基礎練習です。 Windows XPのコマンドプロンプトでGitの基本的なコマンドを動かしていきます。 Gitを学び始めるきっかけにどうぞ。
(筆者もまだGitを使いこなしているわけではありません。 誤りのご報告、改善提案などは大歓迎です。フィードバックからよろしくお願いします)

目次

はじめに

Windows XPのコマンドプロンプトで、 バージョン管理ツールGitの基本的なコマンドを動かしてみましょう。

この文書の通りに実行すると、 基本的なGitのコマンドをひととおり試すことができます(できるはずです)。

バージョン管理というものやGitについての解説は省き、 オペレーションだけを示します。

ダウンロードとインストール

Gitのホームページにある、 Downloadのページから、 Win と書かれている二つのリンクのうち、 msysGitと書かれている側のリンク、 http://code.google.com/p/msysgit/downloads/listをたどります。 ファイルの一覧が出るので、新しいものを選んでダウンロードします。

(もう一つのリンクのほうはCygwinです。 Cygwinに慣れている人やSubversionの連携を考えている人はこちらがいいという話もありますが、 結城はまだ試してません。ごめんなさい。 WindowsのGit環境については、WindowsでのGit環境構築とその注意点もご参考にどうぞ)

結城が以下で使ったファイルは、 Git-1.6.4-preview20090730.exe です。

ダウンロードしたファイルを動かすとインストールが始まります。 インストール先はデフォルトのまま、 C:\Program Files\Git としました。

ファイルをGitの管理下に置きましょう

ファイルをGitの管理下に置きましょう。

ディレクトリとファイルを作成しましょう

まずは作業場所を整え、readme.txtというファイルを作ります。

C:\> mkdir work

C:\> cd work

C:\work> mkdir myproject

C:\work> cd myproject

C:\work\myproject> echo This is a readme file. > readme.txt      ※readme.txtを作った

C:\work\myproject> type readme.txt        ※内容の確認
This is a readme file.

カレントディレクトリ以下のファイルすべてをGitの管理下に置きましょう

C:\work\myproject> git init ※Gitの初期化をします
Initialized empty Git repository in C:/work/myproject/.git/

C:\work\myproject> git add . (最後のピリオド(カレントディレクトリの意)を忘れずに)

C:\work\myproject> git commit -m "Initial commit." ※修正をメッセージ付きでコミットします
[master (root-commit) a4f79ce] Initial commit.
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 readme.txt

C:\work\myproject> git log ※作業ログを見ます
commit a4f79ce23435c30a16f14fae32d9d8cfa0aa1f92
Author: hyuki <hyuki@example.com>
Date:   Sat Aug 22 15:41:14 2009 +0900

    Initial commit.

実は、ここには管理用のディレクトリ .git も作られています。

C:\work\myproject> dir /b       ※/bオプションで名前だけ見る
.git                          ※管理用のディレクトリ
readme.txt

差分を確認しましょう

readme.txtファイルに一行追加してから差分を確認してみましょう。

C:\work\myproject> echo Nice to meet you. >> readme.txt

C:\work\myproject> type readme.txt
This is a readme file.
Nice to meet you.

C:\work\myproject> git diff               ※差分を見ましょう
diff --git a/readme.txt b/readme.txt
index 277c8cc..5eed5b3 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1 +1,2 @@
 This is a readme file.
+Nice to meet you.

現在の状態を見てみましょう

C:\work\myproject> git status
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   readme.txt     ※readme.txtが修正されてます(modified)
#
no changes added to commit (use "git add" and/or "git commit -a")

コミットすると編集結果が反映されます

行った修正は、コミットしてはじめてリポジトリに反映されます。 コミットするときには、-mオプションで修正内容を書きます。

C:\work\myproject> git commit -a -m "Add a greeting."  ※-aオプションは、変更したファイルを自動的にgit addします
[master a8055f0] Add a greeting.
 1 files changed, 1 insertions(+), 0 deletions(-)

新しいファイルを追加します

作業コピーの状態を確かめます

C:\work\myproject> git status
# On branch master
nothing to commit (working directory clean)

コミットし忘れているファイルはありません(nothing to commit)。 自分が作業コピーに加えた修正は、リポジトリに反映されています。

新しいhello.txtファイルを作ります

C:\work\myproject> echo Hello. > hello.txt

C:\work\myproject> type hello.txt
Hello.

新しく作ったファイルはまだGitの管理下にありません

C:\work\myproject> git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       hello.txt
nothing added to commit but untracked files present (use "git add" to track)

git statusで、現在の状態がわかります。 いま作ったばかりのファイル(hello.txt)が、まだGitの管理下にないことがわかります。 Gitは、hello.txtのことを追跡していません(untracked)。 追跡するためにはgit addを使いなさいとアドバイスが表示されています。

hello.txtを追加します

C:\work\myproject> git add hello.txt

C:\work\myproject> git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   hello.txt

git addで、 ファイルhello.txtをGitの管理下に置きました。 でも、まだリポジトリには反映していません。

git statusを実行すると、 追加したけれどまだコミットしていないファイルがわかります(new file:という印がつきます)。

コミットしてリポジトリに反映します

C:\work\myproject> git commit -a -m "Add hello.txt."
[master a07d6dc] Add hello.txt.
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 hello.txt

C:\work\myproject> git status
# On branch master
nothing to commit (working directory clean)

git commitでリポジトリにコミットしました。

再度git statusしてみると、 さっきコミットしてないと言われたファイル(hello.txt)の名前は、もう表示されません。 すでにコミットされたからです。

新しいディレクトリを追加します

新しいディレクトリに新しいファイルを作り、リポジトリにコミットしてみましょう。

C:\work\myproject> mkdir src ※srcディレクトリを作成します

C:\work\myproject> cd src ※srcディレクトリへカレントディレクトリを変更します

C:\work\myproject\src> ※ここで、エディタを使ってGood.javaを作成します

C:\work\myproject\src> type Good.java
public class Good {
    public static void main(String[] args) {
        System.out.println("Good");
    }
}

C:\work\myproject\src> git add Good.java

C:\work\myproject\src> git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   Good.java
#

C:\work\myproject\src> cd ..

C:\work\myproject> git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   src/Good.java
#

C:\work\myproject> git commit -a -m "Add a Java source file."
[master 9437904] Add a Java source file.
 1 files changed, 5 insertions(+), 0 deletions(-)
 create mode 100644 src/Good.java

C:\work\myproject> git status
# On branch master
nothing to commit (working directory clean)

編集からコミットまでの流れはこんな風に進みます

C:\work\myproject> cd src

C:\work\myproject\src> ※ここで、エディタを使ってGood.javaを編集する

C:\work\myproject\src> type Good.java
public class Good {
    public static void main(String[] args) {
        System.out.println("Good!");
    }
}

C:\work\myproject\src> git diff                     ※差分を見てみましょう
diff --git a/src/Good.java b/src/Good.java
index 1c1f198..ab7c9e5 100644
--- a/src/Good.java
+++ b/src/Good.java
@@ -1,5 +1,5 @@
 public class Good {
     public static void main(String[] args) {
-        System.out.println("Good");
+        System.out.println("Good!");
     }
 }

C:\work\myproject\src> git commit -a -m "Add an exclamation mark."
[master 83f63df] Add an exclamation mark.
 1 files changed, 1 insertions(+), 1 deletions(-)

ブランチを使ってみましょう

新しいブランチを作ります

C:\work\myproject\src> git branch mytrial ※mytrialというブランチを作りました

C:\work\myproject\src> git branch ※現在のブランチは?
* master           ※masterが現在のブランチ(*)印
  mytrial          ※mytrialというブランチもできている

ブランチをmytrialに切り替えましょう

C:\work\myproject\src> git checkout mytrial     ※mytrialにブランチを切り替えます
Switched to branch 'mytrial'

C:\work\myproject\src> git branch               ※現在のブランチは?
  master
* mytrial                          ※mytrialが現在のブランチになりました

C:\work\myproject\src> dir /b
Good.java

C:\work\myproject\src> ※ここで、エディタを使ってGood.javaを編集する

C:\work\myproject\src> type Good.java
public class Good {
    public static void main(String[] args) {
        System.out.println("Good!!!!!!!!!");
        System.out.println("Try!Try!Try!");
        System.out.println("Good!Good!Good!");
    }
}

C:\work\myproject\src> git diff
diff --git a/src/Good.java b/src/Good.java
index ab7c9e5..79acd88 100644
--- a/src/Good.java
+++ b/src/Good.java
@@ -1,5 +1,7 @@
 public class Good {
     public static void main(String[] args) {
-        System.out.println("Good!");
+        System.out.println("Good!!!!!!!!!");
+        System.out.println("Try!Try!Try!");
+        System.out.println("Good!Good!Good!");
     }
 }

C:\work\myproject\src> git commit -a -m "Add messages."
[mytrial f48fecb] Add messages.                         ※これはmytrialブランチへのコミットです
 1 files changed, 3 insertions(+), 1 deletions(-)

C:\work\myproject\src> git status
# On branch mytrial
nothing to commit (working directory clean)

ブランチをmasterに戻してmytrialブランチの変更をマージしましょう

C:\work\myproject\src> git branch
  master
* mytrial

C:\work\myproject\src> git checkout master  ※ブランチをmasterに戻します
Switched to branch 'master'

C:\work\myproject\src> type Good.java ※mytrialでの修正はまったくmasterに影響しません
public class Good {
    public static void main(String[] args) {
        System.out.println("Good!");
    }
}

C:\work\myproject\src> git diff mytrial  ※masterとmytrialとの違いを見てみましょう
diff --git a/src/Good.java b/src/Good.java
index 79acd88..ab7c9e5 100644
--- a/src/Good.java
+++ b/src/Good.java
@@ -1,7 +1,5 @@
 public class Good {
     public static void main(String[] args) {
-        System.out.println("Good!!!!!!!!!");
-        System.out.println("Try!Try!Try!");
-        System.out.println("Good!Good!Good!");
+        System.out.println("Good!");
     }
 }

C:\work\myproject\src> type Good.java ※違いを見ただけなので、masterはまだそのまま
public class Good {
    public static void main(String[] args) {
        System.out.println("Good!");
    }
}

C:\work\myproject\src> git merge mytrial ※ここで、mytrialの修正をマージします(コミットもされます)
Updating 83f63df..f48fecb
Fast forward
 src/Good.java |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

C:\work\myproject\src> type Good.java ※はい、mytrialの修正がマージされました
public class Good {
    public static void main(String[] args) {
        System.out.println("Good!!!!!!!!!");
        System.out.println("Try!Try!Try!");
        System.out.println("Good!Good!Good!");
    }
}

C:\work\myproject\src> git diff ※すでにコミットされています

C:\work\myproject\src> git status ※すでにコミットされています
# On branch master
nothing to commit (working directory clean)

ここまでの作業ログを見ましょう

C:\work\myproject\src> git log
commit f48fecb045ef796be3feb956d50a6b9af809dcee
Author: hyuki <hyuki@example.com>
Date:   Sat Aug 22 16:16:32 2009 +0900

    Add messages.

commit 83f63df5e2e130cba3cb2d74dccb4f16e3d61cd8
Author: hyuki <hyuki@example.com>
Date:   Sat Aug 22 16:08:45 2009 +0900

    Add an exclamation mark.

commit 94379041c045a206fb665d90802728e115631471
Author: hyuki <hyuki@example.com>
Date:   Sat Aug 22 16:06:38 2009 +0900

    Add a Java source file.

commit a07d6dc586da881b2917f190432253d4a616aabd
Author: hyuki <hyuki@example.com>
Date:   Sat Aug 22 15:53:59 2009 +0900

    Add hello.txt.

commit a8055f0b91d5a811f1b66c1adf3f9c917248ed69
Author: hyuki <hyuki@example.com>
Date:   Sat Aug 22 15:49:59 2009 +0900

    Add a greeting.

commit a4f79ce23435c30a16f14fae32d9d8cfa0aa1f92
Author: hyuki <hyuki@example.com>
Date:   Sat Aug 22 15:41:14 2009 +0900

    Initial commit.

Gitの基礎練習は以上です。 お疲れさま。

この文書に書かなかったこと

関連リンク

更新履歴

ぜひ、感想をお送りください

あなたのご意見・感想をお送りください。 あなたの一言が大きなはげみとなりますので、どんなことでもどうぞ。

あなたの名前: メール:
学年・職業など: 年齢: 男性女性
(上の情報は、いずれも未記入でかまいません)

お手数ですが、以下の問いに答えてから送信してください(迷惑書き込み防止のため)。
今年は西暦何年ですか?

何かの理由でうまく送れない場合にはメールhyuki dot mail at hyuki dot comあてにお願いします。

豊かな人生のための四つの法則

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy