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からコンフリクトしたファイルの内容を抜き出して、それで改めてコミットしようぜ、ってことで。