日々常々

ふつうのプログラマがあたりまえにしたいこと。

最初のコミットを最初のコミットじゃなくす

最初のコミットに紛れていた要らん子を歴史から抹消する - 裏紙より。


「最初のコミットだからめんどくさい」と読み取った。つまり、最初のコミットを付け足せれば二番目じゃん!

※思いつきです。実用性なんて知りません。


まず初期状態を作る。

echo a>a
echo x>x
git add .
git commit -m'最初のコミット'
echo b>b
git add .
git commit -m'二番目のコミット'
echo c>c
git add .
git commit -m'私はたぶん三番目のコミットだと思うから'
echo d>d
git add .
git commit -m'四番目のコミット'
echo e>e
git add .
git commit -m'そろそろめんどい五番目'
echo f>f
git add .
git commit -m'六番目'
echo g>g
git add .
git commit -m'7'

これでだいたい同じものができる。だいたい。

irof@Airof hoge (master)$ git log --stat --oneline
0800692 7
 g |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
6fc9a24 六番目
 f |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
00ee31f そろそろめんどい五番目
 e |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
fb27cad 四番目のコミット
 d |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
d19fd1a 私はたぶん三番目のコミットだと思うから
 c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
6b93359 二番目のコミット
 b |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
416eb14 最初のコミット
 a |    1 +
 x |    1 +
 2 files changed, 2 insertions(+), 0 deletions(-)


全く別の新しいリポジトリを作って、適当なコミットをする。

irof@Airof piyo$ git init
irof@Airof piyo (master)$ git commit -m'空コミット' --allow-empty
[master (root-commit) fb1a474] 空コミット

それから、hogeを持ってくる。

irof@Airof piyo (master)$ git remote add hoge ../hoge
irof@Airof piyo (master)$ git fetch hoge
warning: no common commits
remote: Counting objects: 22, done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 22 (delta 5), reused 0 (delta 0)
Unpacking objects: 100% (22/22), done.
From ../hoge
 * [new branch]      master     -> hoge/master
irof@Airof piyo (master)$ git rebase master hoge/master 
First, rewinding head to replay your work on top of it...
Applying: 最初のコミット
Applying: 二番目のコミット
Applying: 私はたぶん三番目のコミットだと思うから
Applying: 四番目のコミット
Applying: そろそろめんどい五番目
Applying: 六番目
Applying: 7

これで「最初のコミット」じゃなくなった。

irof@Airof piyo ((dbf6874...))$ git log --stat --oneline
dbf6874 7
 g |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
9d3d511 六番目
 f |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
79c8bcd そろそろめんどい五番目
 e |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
3a85d5a 四番目のコミット
 d |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
3febcc0 私はたぶん三番目のコミットだと思うから
 c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
219ad77 二番目のコミット
 b |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
b00fb5e 最初のコミット
 a |    1 +
 x |    1 +
 2 files changed, 2 insertions(+), 0 deletions(-)
fb1a474 空コミット

リモートの片付けとかはてきとーに。後は煮るなり焼くなり。