【git】一部だけスタッシュしたい
一部だけスタッシュしたい
SourceTreeでスタッシュする時、問答無用で全部スタッシュされてしまって
「このファイルだけスタッシュしたいのに」という時はないだろうか
探してみたけど、残念ながらSourceTree上では
部分スタッシュが出来ないみたいなので、gitコマンドでやるしかないようだ。
まずはgitプロジェクト上でターミナルを開きましょう。
右上のターミナルボタンを押せば、カレントディレクトリを移動して開いてくれるので便利です。
そして、次のコマンドを実行すれば、hunkが順番に表示されるので
1つずつスタッシュするか決める事が出来ます。
hunkはひとまとまりの変更点を表す単位的なやつです。
1 |
git stash save -p "スタッシュ名" |
するとhunk単位でどうするか聞かれるのでどうするか指定していきます。
1 2 3 4 5 6 7 8 |
diff --git a/hoge.php b/hoge.php index 9735660..968fa91 100644 --- a/hoge.php +++ b/hoge.php @@ -12,6 +12,7 @@ - $fuga = 100; + $fuga = 200; Stash this hunk [y,n,q,a,d,/,j,J,g,e,?]? |
指定はいくつか種類がありますが、下記だけ知っとけば大丈夫だと思います。
1 2 3 4 5 6 |
y - このhunkをスタッシュする n - このhunkをスタッシュしない q - スタッシュをやめる s - より小さいhunkに分解する e - このハンクを手動編集 ? - ヘルプ表示 |
yやnは直感的にわかりますが、sでhunkを分割できるところがポイント。
変更点が近いと1つのhunkにまとめられてしまうのでsを指定すれば2つに分割して再指定できます。
適当にスタッシュしすぎると後で何なのかよくわからなくなるのでちゃんと管理しましょう。
一部だけスタッシュを戻したい
一部だけスタッシュできたなら、一部だけ戻したい時もある。
でも1つのスタッシュには大量のファイルが含まれているぞ。
そんな時は次の手順でファイル単位で戻す事が出来ます。
1. 現在スタッシュしているスタッシュリストを表示してスタッシュ番号を確認
2. 指定スタッシュ番号のファイルリストを表示
3. 指定スタッシュ番号の指定ファイルだけチェックアウト
1 2 3 4 5 6 7 8 9 10 11 |
1. git stash list stash@{0}: On develop: 修正 stash@{1}: On develop: バックアップ 2. git stash show stash@{1} dir/backup1.php | 101 ++++++++++++++++++++++++++++++++--- dir/backup2.php | 4 ++ dir/backup3.php | 69 ++++++++++++++++++++++-- 3 files changed, 165 insertions(+), 9 deletions(-) 3. git checkout stash@{1} dir/backup2.php |
GUIからの操作は便利ですが、柔軟な対応にはコマンドに軍配が上がります。
スタッシュはよく使う機能なので、
コマンドからも操作できるようにしておきたいところです。