HPCメモ

HPC(High Performance Computing)に関連したりしなかったりすることのメモ書き

git stash popで発生したコンフリクトを解消する。

さきに参考URL

dackdive.hateblo.jp d.hatena.ne.jp

こんな流れで作業していてはまりました。

あるファイルを編集中に障害の調査をしなきゃならん事態が発生

編集中のファイルをstashして同じブランチで障害の調査を開始*1

デバッグコードを埋め込んだり、ついでに見つかったバグを修正したりでstashした時に修正中のファイル以外を修正

さて、編集したファイルは被ってないからstash popするべー*2

あら、コンフリクトしてますな・・・

という状況です。

"foo" "bar" "baz"の3ファイルがリポジトリにあったとすると fooとbarは手元のファイルを残して"baz"だけstashしてたものをとり込むという操作をやりたいのです。

こんな時はこんな感じで、必要なファイルだけをstashからcheckoutして上書きできます。

> git checkout --theirs stash@{0} baz

この後、bazはgit stashした時のファイルに戻って、さらにgit addされた状態になってます。 stashの方も残ったままなので、不要であれば

> git stash drop

して消しておきましょう。

stashしたものだからpop時のオプションでなんとかなるだろうと思って調べてたんですが、どうやらそういうわけではないようです。 しかし、スタックに積んでおいて全部出さずにちょっとだけ持っていくとかお行儀悪いなwww*3

*1:これがそもそもの間違い。一旦ブランチを切って保存した上で元のブランチから調査用のブランチを切るべき・・・なんだけど作業を始める時の精神状態だと全部破棄してstash popで戻ってくりゃおっけーって思うんですよねorz

*2:一時的に修正中のファイルをリネームしてgit checkoutしたような感覚でいたけど、stashはあくまでworking directory全体を保存してるので別のファイルを弄ったらそりゃーコンフリクトしますね・・・

*3:いや、最終的にはdropしてるけど・・・