git-stashしたファイルをapplyしようとしてコンフリクトしたときの解決法

はじめに

作業途中で思いついた小さめの修正を先にコミットしてしまおうと思ったときに、ちょっとgit-stashをつかってみたところ、マージ時にコンフリクトしちゃいました。

実際のところ、あるクラスをリファクタリングして名前変更したんだけど、名前変更と実装内容の変更は別に分けてコミットしたいなーと思いついて、ハマったというわけです。


下の知識があれば、必要ファイルを抜き出してさくっと対処できたと思われる(ちがうんかな)。
というわけで、メモに残しておきます。


IDをstash@{0}とか指定すればshowもcheckoutもできるよ!

いや、知ってる人には当たり前なんでしょうけど。

$ git stash list
stash@{0}: WIP on master: 236b61e... initial import

というstash状態で、

$ git show stash@{0}
commit 7f5aa496d45a4bec37706ea121bdfbc53c0e9087
Merge: 236b61e... b5fb4a0...
Author: nobeans <nobeans@example.com>
Date:   Tue May 26 00:15:18 2009 +0900

    WIP on master: 236b61e... initial import

diff --cc hoge_moved.txt
index 0000000,04f18dd..fcc4775
mode 000000,100644..100644
--- a/hoge_moved.txt
+++ b/hoge_moved.txt
@@@ -1,0 -1,1 +1,2 @@@
+ HOGEHOE
++2nd line

と、stashの中身をgit showで見れたり、

$ git show stash@{0}:hoge_moved.txt
HOGEHOE
2nd line

と、ファイル名を指定して見れたり、

$ git checkout stash@{0} hoge_moved.txt

と、ピンポイントでファイルを指定して抜き出せます。


git-showとgit-checkoutで IDとファイル名の間のコロンが必要だったりいらなかったりする違いが微妙すぎて、いつも覚えられません><

さいごに

いったん公開してから、これじゃタイトルの「解決法」になってないことに気づいた!


えーと、上のgit-checkoutでstashからコンフリクトしたファイルの内容を抜き出して、それで改めてコミットしようぜ、ってことで。