revert したコミットを revert してみる修行

revert したコミットを revert したらどうなるのか実験。元に戻ってくれることを期待。次のシェルスクリプト fine.sh を作成。

# 最初は 1 から 5 までの数字が一行ごとに並んだファイル num を作る。             
# git 管理する。最初のコミット A。                                              
mkdir first; cd first; seq 5 > num
git init; git add .; git commit -m 'first commit'; cd ..

# 上流リポジトリ repos を作って、そこに作業用ディレクトリから push する。       
# push できれば作業用ディレクトリ first は要らないから消しちゃう。              
mkdir repos; cd repos; git --bare init --shared; cd ..
cd first; git push ../repos master; cd ..
rm -fr first

# 新たなリポジトリを sidea に作る。                                             
git clone repos sidea; cd sidea

# num から 3 を除くコミット B を作る。                                          
grep -v 3 num > tmp; mv tmp num; git commit -a -m 'remove 3'

# num に 6 を加えるコミット C を作る。                                          
echo 6 | cat num - > tmp; mv tmp num; git commit -a -m 'add 6'

# コミット B を revert するコミット D を作る。                                  
git revert --no-edit HEAD~1

# num に 7 を加えるコミット E を作る。                                          
echo 7 | cat num - > tmp; mv tmp num; git commit -a -m 'add 7'

# コミット D を revert するコミット F を作る。                                  
git revert --no-edit HEAD~1

実行。

[takeyuki@sunya gitest]$ mkdir 4200 && cd 4200
[takeyuki@sunya 4200]$ sh ../fine.sh
[takeyuki@sunya 4200]$ cd sidea

ログを見てみる。

[takeyuki@sunya sidea]$ git log --pretty=short
commit ffe64256021be4657e93018a18e13c0fd232f991
Author: Takeyuki Kojima <khojima@nifty.com>

    Revert "Revert "remove 3""

commit 29eedf2ed4cfc4bd40ccbb58367816020475381e
Author: Takeyuki Kojima <khojima@nifty.com>

    add 7

commit 6832a35e2bca1125cbc3d05e0de30a4723616b82
Author: Takeyuki Kojima <khojima@nifty.com>

    Revert "remove 3"

commit 962a6695ad614a4ff82c40f583007bc0d3a638ae
Author: Takeyuki Kojima <khojima@nifty.com>

    add 6

commit d1d65e4e3e55140bd1e6ba95c3d6a7945238b3a1
Author: Takeyuki Kojima <khojima@nifty.com>

    remove 3

commit bc98767ca0921428def3c8a58adf1fa3c8fead54
Author: Takeyuki Kojima <khojima@nifty.com>

    first commit

ふむ。

[takeyuki@sunya sidea]$ cat num
1
2
4
5
6
7

ちゃんと「3 を削除する」変更が効いている。じゃあ、最初に revert したときはどうだったかと言うと、

[takeyuki@sunya sidea]$ git show 6832a35
commit 6832a35e2bca1125cbc3d05e0de30a4723616b82
Author: Takeyuki Kojima <khojima@nifty.com>
Date:   Thu Dec 9 19:36:56 2010 +0900

    Revert "remove 3"
    
    This reverts commit d1d65e4e3e55140bd1e6ba95c3d6a7945238b3a1.

diff --git a/num b/num
index de50652..b414108 100644
--- a/num
+++ b/num
@@ -1,5 +1,6 @@
 1
 2
+3
 4
 5
 6

ちゃんと「「3 を削除する」を取り消す」変更が効いている。