SourceTreeで特定のファイルだけStashする
stashは全部の追跡ファイルをstashしてしまうので割と一部分のファイルだけスタッシュしたい時があります。
それをSourceTreeでやってみたいと思います。
一発で行う方法ではないので数回の作業となります。
(やや邪道です)
流れ
- stashしたく無いファイルを仮コミット。
- スタッシュする
- 一つ前のコミットまで戻す。
例
- main.rs
- lib.rs
の2つのファイルがあって、main.rsはスタッシュしたくない場合です。
1. main.rsをコミットする (コミットメッセージは「たこ焼き」にしています。(なんでも良いです、真似しないでください。))
2. スタッシュする (未追跡ファイルもスタッシュしたいならステージングにあげる)
3. main.rsを戻すために1つ前のコミットまで戻す
履歴から一つ前のコミットで右クリック (例ではmain.rsは「たこ焼き」でコミットしたので、「たこ焼き」の一つ前を選択します)
「このコミットまで戻す」を押す
SoftかMixedを選んでOKで戻す(HARDはダメですよ!)
- softは変更状態を残しながらステージングに戻す (上段)
- mixedは変更状態を残しながらインデックスに戻す(下段) (初期値)
コマンドで行う方法
コマンドで行う方法もついでに置いておきます。
git stash push
git stash push <ファイル名> -m <コメント>
これが一番便利
source treeの操作を愚直に表現
git stash pushがあるのでこちらの方法は意味を無しません。
git add ファイル名(stashしたく無いファイル) git commit -m "たこ焼き" git stash git reset ~HEAD
git stash -p
こちらは差分を選択していく方法で、指定のものをstashするのにぴったりですが、ファイル丸ごとstashするという時はちょっと気持ち的に面倒に感じることがあります。(コマンドは短いですが、その後の選択していく作業が割と面倒です。)
git stash -p
感想
GUI操作も覚えておくと、右手一本だけで作業ができるので便利です。
気が向けばカスタムアクションを作ると思います。
関係ないですが、Source Treeには不満はありませんが、やっぱりRevertとResetの日本語の説明が見分け付きづらいので日本語の横にReverやResetの文字を入れて欲しいです。