Git で Stash よく使うなら
自分の作業ブランチに他のバグ対応を取り込みたい、けど、絶賛作業中でコミットできない。。。
そんなときは git stash
ご活用かと思います。特に VS Code では UI から Stash の追加と pop が目視で確認しながら行えるので比較的安全に作業を退避して、ブランチ切り替えて、マージして、ブランチ戻して、stashも戻して、などごちゃごちゃやりつつ、commit の綱渡りをしておられるかと思います。
小さな修正ならいいかもしれませんが、そこそこのボリュームのマージして動作確認した後で自分の stash もマージしてさらに調整しないと・・・という作業では commit ミスが起きやすく、作業中にブランチを行ったり来たり、もしくはマージ用の一時ブランチ作ってそっちで集中的にマージと動作確認、さらにバグが見つかって破綻、などの歴史を繰り返しているかと思います。
そう、ブランチの切り替え作業はけっこうリスクを伴う作業もあるので、できれば並行して作業を進めたい…
そんなある日、以下の記事を目にしました。
Git worktree を使え!
Git worktree でコードを自由にいじろう ということですが、git worktree
コマンドってなんだ?ということで公式のヘルプを見てみると・・・
Manage multiple working trees
ってことで、複数のワーキングツリーを管理するコマンドだそうです。・・・っていうかワーキングツリー、複数にできたんだ・・・?
ワーキングツリーとはローカルの作業フォルダのことですが、1つのリポジトリから個別にCloneしてくればもちろん複数になりますがそれぞれ別のリポジトリ
となってしまうので、ファイルの比較とか取るのは面倒だったりしました。
それが一つのリポジトリに対してちゃんと複数のワーキングツリーとして管理できると、複数ブランチを別のワーキングツリーとして並列に管理でき、diff を取ったりmergeしたりが現在の作業ファイルをそのまま維持してできるので飛躍的に安全に作業できるのです。
git worktree
コマンドはVS Code の UIではサポートされていないので以下のようなコマンドを打ちます。
$ git worktree add パス ブランチ名
で、ローカルからワークツリーを削除するには
$ git worktree remove パス
でOKです。
ただしVS Code のコード管理機能ではメインのワーキングツリーしか認識してくれないのでそちらの操作はコマンドベースになります。まぁ、メインのワークツリーのコミットに邪魔されないので十分かと思います。
まぁVS CodeのUIでサポートされればより使いやすくなると思いますが、git worktree アリ! というお話でした。
git worktree
の詳しい使い方については、以下の優秀な記事をご覧いただきたいです。
以上です。