Posted at

git-rebaseのexecを使ってstashした内容を履歴に埋め込む

More than 5 years have passed since last update.

あなたはgitリポジトリでコードを書いています。

で、コミットをするとき「このコードはさっきのコミットと一緒にした方がいいな」と思った場合どうしますか?

% git commit -a --amend -C HEAD

ですね?(HEADのコミットメッセージから変更がない場合)

では「このコードは2個前のコミットと一緒にした方がいいな」と思った場合どうしますか?一旦コミットして、あとから git-rebase しますか?

手っ取り早く済ませるには git-stash を使うといいでしょう。

% git stash

% git rebase -i HEAD~2

するとこんな感じの画面が表示されます。


git-rebase後に表示される画面

pick 45acd16 このコミットにいれたい

pick 45f6df0 一つ前のコミット

これを


execを挿入

pick 45acd16 このコミットにいれたい

exec git stash pop; git commit -a --amend -C HEAD
pick 45f6df0 一つ前のコミット

こんな感じに変更してエディタを閉じれば完了します。 この exec は後続する文字列をシェルで実行しろ、という意味です。なのでやってることは実質的に


git-rebase後に表示される画面

edit 45acd16 このコミットにいれたい

pick 45f6df0 一つ前のコミット

して edit 箇所で止まってから

% git stash pop; git commit -a --amend -C HEAD

するのと同じです。ちなみに今回の場合 exec 以降を ; で区切って二行にすると諸事情により意図した通りに動かないので注意が必要です。


これだとダメ

pick 45acd16 このコミットにいれたい

exec git stash pop
exec git commit -a --amend -C HEAD
pick 45f6df0 一つ前のコミット