はわわーっ

はわわわわっ

[git] gitのお勉強 - その2

[git] gitのお勉強 - その1 - yomi322 blogの続きです。

とりあえず、今の状態を確認してみる。

% git status
# On branch master
nothing to commit (working directory clean)

ちょっと変更を加えてみる。

% cat hello.c
#include <stdio.h>

int main(void) {
    int i = 0;

    printf("i = %d\n", i);

    printf("git test\n");
    printf("hello, world\n");

    return 0;
}

% 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:   hello.c
#
no changes added to commit (use "git add" and/or "git commit -a")

これで作業ツリーのファイルが変更されているので、これをステージする。

% git add hello.c 
% git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	modified:   hello.c
#

ステージした後で、ファイルを変更してみる。

% cat hello.c
#include <stdio.h>

int main(void) {
    int i = 0;

    for (i = 0; i < 10; i++) {
        printf("i = %d\n", i);
    }

    return 0;
}

% git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	modified:   hello.c
#
# 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:   hello.c
#

これで、ステージされた変更とされていない変更が存在していることになる。変更の差分を見るにはgit diffする。

% git diff hello.c
diff --git a/hello.c b/hello.c
index cd1dedc..adbf737 100644
--- a/hello.c
+++ b/hello.c
@@ -3,10 +3,9 @@
 int main(void) {
     int i = 0;
 
-    printf("i = %d\n", i);
-
-    printf("git test\n");
-    printf("hello, world\n");
+    for (i = 0; i < 10; i++) {
+        printf("i = %d\n", i);
+    }
 
     return 0;
 }

行の先頭に-がついているのが変更前、+がついているのが変更後を表している。オプションをつけないでgit diffするとステージングエリアと作業ツリーの間の差分が表示される。リポジトリとステージングエリアの差分を見るには--cachedオプションをつける。

% git diff --cached hello.c
diff --git a/hello.c b/hello.c
index f63f257..cd1dedc 100644
--- a/hello.c
+++ b/hello.c
@@ -1,8 +1,13 @@
 #include <stdio.h>
 
 int main(void) {
+    int i = 0;
+
+    printf("i = %d\n", i);
+
     printf("git test\n");
     printf("hello, world\n");
+
     return 0;
 }
 

リポジトリと作業ツリーの差分はgit diffに直近のコミットを表すHEADというのをつける。

% git diff HEAD hello.c
diff --git a/hello.c b/hello.c
index f63f257..adbf737 100644
--- a/hello.c
+++ b/hello.c
@@ -1,8 +1,12 @@
 #include <stdio.h>
 
 int main(void) {
-    printf("git test\n");
-    printf("hello, world\n");
+    int i = 0;
+
+    for (i = 0; i < 10; i++) {
+        printf("i = %d\n", i);
+    }
+
     return 0;
 }
 

ついでにファイル名も変えてみる。ファイルの移動やファイル名の変更にはgit mvというコマンドを使えばいい。使い方は普通のmvコマンドと同じ。

% ls
hello.c
% git mv hello.c forloop.c
% ls
forloop.c
% git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	renamed:    hello.c -> forloop.c
#
# 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:   forloop.c
#

ファイル名が適切かどうかはいいとして、ちゃんと変更できているのがわかる。最後にコミットして終わることにする。

% git commit -a -m "for loop test" -m "change file name"
[master 0c7e6dc] for loop test
 2 files changed, 12 insertions(+), 8 deletions(-)
 create mode 100644 forloop.c
 delete mode 100644 hello.c
% git log -1
commit 0c7e6dcfdc8e3244454de4ac7002387c70aa1d5e
Author: yomi322 <yomi322@gmail.com>
Date:   Wed Apr 25 14:46:52 2012 +0900

    for loop test
    
    change file name

git commitに-aオプションをつけるとgit addも同時にやってくれる。あと-mのコミットメッセージを複数つけることもできる。git logは-Nオプション(Nは適当な数字)をつけるとその分だけのコミットログを出してくれる。コミットメッセージを2つつけたので、ログにも2つ出てきている。

今回はここまで。次はブランチの話かなー。