新規作成したファイルを選別してgit stashしたい
私が試した小技の話。
git stash
の説明については以下を参照してください。
(git stash
すごく便利)
やりたいこと
タイトルの意味が伝わっているのか否か、微妙なところだと思う。
まずそもそもの話、 「git stash
は新規作成した(untrackedな)ファイルはstash
しない」
という特徴がある。(今まで追跡してなかったものは退避しないという考え方)
issueの区切りとか、開発の切れ目でstash
したい!!というときはちょっと不便。
で、やりたかったことは、追跡してなかったファイルの中でも.gitignore
ファイルは残して、他のファイル(追跡したものも含めて)をstash
したかった。
新規作成したファイルも含めてstashする
これはオプションu
をつければ解決できる。
ただこれだけでは、新規作成したファイルから、どれをstash
してどれをstash
しないのか選ぶことはできない。
stashしたい変更を選択する
これは一般的にはgit add
でも使うであろう、オプションp
をつければ良い。
しかし、オプションu
とp
は同時に指定することができない。
オプションkを組み合わせる!!
オプションk
というものがある。
公式の説明をgoogle翻訳に突っ込むと、
インデックスにすでに追加されているすべての変更はそのまま残ります。
とのこと。
ということで stashしたくない新規ファイルをaddしておいてオプションuとkを使ってstashする ことで、擬似的に私のやりたかったことを実現します。
コマンドで書くとこんな感じ↓
# gitignoreファイル(stashしたくない新規ファイル)をインデックスに追加しておく git add gitignore # オプションkとuを駆使 git stash save -k -u "メッセージの追加も可能"
注意事項
オプションk
は、インデックスに残した変更を 残す だけで、 インデックスした変更をstashしないわけでなはない 模様(インデックスも実はstash
されている)
stash
を適用するときにstash
したときにadd
していたファイルをインデックスから戻しておくと、無駄にコンフリクトがおきたりする。
つまりは、上記の方法でstash
した場合は、stash
したときの状態に戻してから適用する必要があるのでご注意を(もちろん、インデックスしていたファイルに何かしらの変更を加えていた場合は普通にコンフリクトするかと思う)
個人的には違和感のある仕様ではあるが、、
gitignore
ファイルを避けるくらいだったら、上に挙げた方法で特段問題はなかった。