読者です 読者をやめる 読者になる 読者になる

はわわーっ

はわわわわっ

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

[git] gitのお勉強 - その5 - yomi322 blogの続き。もう疲れた。今回はコミットの訂正など。

まず、新しいファイルを作ってコミットする。

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

int main(void) {
    int i = 0;
    while (i < 10) {
        printf("i = %d\n", i);
    }

    return 0;
}

% git add while.c
% git commit -m "add while.c"
[master e2cf394] add while.c
 1 files changed, 11 insertions(+), 0 deletions(-)
 create mode 100644 while.c

このままだと、無限ループになってしまうのでファイルを修正する。

% git diff while.c
diff --git a/while.c b/while.c
index f1e8b8a..78698be 100644
--- a/while.c
+++ b/while.c
@@ -4,6 +4,7 @@ int main(void) {
     int i = 0;
     while (i < 10) {
         printf("i = %d\n", i);
+        i++;
     }
 
     return 0;

でコミットするときに--amendをつける。これで直近のコミットを訂正できる。

% git commit -a --amend -C HEAD
[master 66441dd] add while.c
 1 files changed, 12 insertions(+), 0 deletions(-)
 create mode 100644 while.c

オプションとして-C HEADをつけておくと、直近のコミットと同じコミットメッセージを使う。

コミットを取り消すにはgit revertを使う。その前に今の状態のgit logを見ておく。

% git log -3
commit 66441dd0f07f8e89d25c9a4a630633619295cdf6
Author: yomi322 <yomi322@gmail.com>
Date:   Thu Apr 26 13:50:37 2012 +0900

    add while.c

commit 212fce92f7c13fd80210493a6fdb6fd6136bf8d4
Author: yomi322 <yomi322@gmail.com>
Date:   Wed Apr 25 21:32:43 2012 +0900

    add behavior of negative or 0 value

commit 01c00c9d5225436d27ec868f11415084a265874d
Author: yomi322 <yomi322@gmail.com>
Date:   Wed Apr 25 21:01:59 2012 +0900

    add if.c

コミットを取り消す。

% git revert 66441
[master 60b988b] Revert "add while.c"
 1 files changed, 0 insertions(+), 12 deletions(-)
 delete mode 100644 while.c
% git log -3
commit 60b988b21fc6caa12ef6efc0558c79b09c54da48
Author: yomi322 <yomi322@gmail.com>
Date:   Thu Apr 26 14:08:40 2012 +0900

    Revert "add while.c"
    
    This reverts commit 66441dd0f07f8e89d25c9a4a630633619295cdf6.

commit 66441dd0f07f8e89d25c9a4a630633619295cdf6
Author: yomi322 <yomi322@gmail.com>
Date:   Thu Apr 26 13:50:37 2012 +0900

    add while.c

commit 212fce92f7c13fd80210493a6fdb6fd6136bf8d4
Author: yomi322 <yomi322@gmail.com>
Date:   Wed Apr 25 21:32:43 2012 +0900

    add behavior of negative or 0 value

コミットを取り消して、その変更が新しくコミットされている。git revertに-nオプションをつけると取り消しをコミットせず、ステージングエリアにあげる。これは、いくつかのコミットをまとめて取り消すときに便利。

% git revert -n 212fc
% git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	modified:   if.c
#
% git commit
[master 90ad4cf] Revert "add behavior of negative or 0 value"
 1 files changed, 0 insertions(+), 4 deletions(-)
% git log -3
commit 90ad4cf34fc41effb595d22b8db840914381be2e
Author: yomi322 <yomi322@gmail.com>
Date:   Thu Apr 26 14:15:39 2012 +0900

    Revert "add behavior of negative or 0 value"
    
    This reverts commit 212fce92f7c13fd80210493a6fdb6fd6136bf8d4.

commit 60b988b21fc6caa12ef6efc0558c79b09c54da48
Author: yomi322 <yomi322@gmail.com>
Date:   Thu Apr 26 14:08:40 2012 +0900

    Revert "add while.c"
    
    This reverts commit 66441dd0f07f8e89d25c9a4a630633619295cdf6.

commit 66441dd0f07f8e89d25c9a4a630633619295cdf6
Author: yomi322 <yomi322@gmail.com>
Date:   Thu Apr 26 13:50:37 2012 +0900

    add while.c

コミットをリセットしてみる。git reset --softでコミットをリセットしてステージされた状態にする。

% git reset --soft "HEAD^"
% git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	modified:   if.c
#
% git log -3
commit 60b988b21fc6caa12ef6efc0558c79b09c54da48
Author: yomi322 <yomi322@gmail.com>
Date:   Thu Apr 26 14:08:40 2012 +0900

    Revert "add while.c"
    
    This reverts commit 66441dd0f07f8e89d25c9a4a630633619295cdf6.

commit 66441dd0f07f8e89d25c9a4a630633619295cdf6
Author: yomi322 <yomi322@gmail.com>
Date:   Thu Apr 26 13:50:37 2012 +0900

    add while.c

commit 212fce92f7c13fd80210493a6fdb6fd6136bf8d4
Author: yomi322 <yomi322@gmail.com>
Date:   Wed Apr 25 21:32:43 2012 +0900

    add behavior of negative or 0 value

git reset --hardでコミットをなかったことにできる。

% git reset --hard "HEAD^"
HEAD is now at 66441dd add while.c
% git log -3
commit 66441dd0f07f8e89d25c9a4a630633619295cdf6
Author: yomi322 <yomi322@gmail.com>
Date:   Thu Apr 26 13:50:37 2012 +0900

    add while.c

commit 212fce92f7c13fd80210493a6fdb6fd6136bf8d4
Author: yomi322 <yomi322@gmail.com>
Date:   Wed Apr 25 21:32:43 2012 +0900

    add behavior of negative or 0 value

commit 01c00c9d5225436d27ec868f11415084a265874d
Author: yomi322 <yomi322@gmail.com>
Date:   Wed Apr 25 21:01:59 2012 +0900

    add if.c

これで、コミットの修正については終わり。