gitリポジトリを特定のcommitバージョンまで戻す方法

git-revertかgit-resetを使う
両者の違いは以下の通り

git-revert
ある特定リビジョン(過去にcommitしたバージョン)に戻すパッチを自動生成してコミットする
git-reset
ある特定リビジョン(ryに戻す(戻したリビジョン以降を無かったことにする)

もし複数の人共同作業していて共有リポジトリを変更する場合はgit-resetを行うとまれにひどいことになるので極力git-revertを使った方がいいかも

作業の流れ

  • git-logでどこまで戻すか決める(あとSHAをコピーする)
% git log
commit 46cdec49ae85012327b663531e569d77bf09b1b2
Author: amacou <amacou.abf@gmail.com>
Date:   Sat Jan 17 22:53:55 2009 +0900

    test

commit 427855f94fee2d689db33f2f3d433c55f4f110ff
Author: amacou <amacou.abf@gmail.com>
Date:   Sat Jan 17 22:27:29 2009 +0900

    add .gitignore

commit 49904e11060d12e84a6d0e845513443abfefc912
Author: amacou <amacou.abf@gmail.com>
Date:   Sat Jan 17 18:20:40 2009 +0900
......
  • git-revert SHA(←git-logで確認時にコピーしたSHA)でリポジトリを戻す(もしくはgit-reset)
%git revert 427855f94fee2d689db33f2f3d433c55f4f110ff
Removed .gitignore
Finished one revert.
Created commit c5f9e83: Revert "add .gitignore"
 1 files changed, 0 insertions(+), 8 deletions(-)
 delete mode 100644 .gitignore
%git log
commit c5f9e835ecf1955a5128ad7a40fed3b4b841fd9c
Author: amacou <amacou.abf@gmail.com>
Date:   Sat Jan 17 22:54:53 2009 +0900

    Revert "add .gitignore"
    
    This reverts commit 427855f94fee2d689db33f2f3d433c55f4f110ff.

commit 46cdec49ae85012327b663531e569d77bf09b1b2
Author: amacou <amacou.abf@gmail.com>
Date:   Sat Jan 17 22:53:55 2009 +0900

    test

commit 427855f94fee2d689db33f2f3d433c55f4f110ff
Author: amacou <amacou.abf@gmail.com>
Date:   Sat Jan 17 22:27:29 2009 +0900

    add .gitignore
  • git-checkout -fでチェックアウト
% git checkout -f
  • git-cleanで余計なファイルを消す
%git clean -f

もしかして・・・

もっと単純でもっと簡単な方法があるかも・・