Help us understand the problem. What is going on with this article?

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 一つ前のコミット
yuku_t
FLYWHEEL社でソフトウェアエンジニアをしています。昔はIncrements社最初の従業員としてQiitaを開発したりCTOやったりしていました。
http://yuku.takahashi.coffee
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away