こんにちは、Webプログラマの篠田です。
ALAKI社内では、定期的にスタッフ(社員・アルバイト含む)の技術向上を目的とした、社内勉強会を実施しています。
先日、「ALAKI社内限定Gitエバンジェリスト」である私が登壇させていただきました。
その中で、普段のGit + SourceTreeで利用ができていないなぁと思う機能をまとめて発表しましたので、その一部を今回ご紹介します。
スタッシュ(stash)
あるファイルの機能追加や更新作業を行っている時に、「割り込み」で急ぎの修正を依頼される時があると思います。
それが、現在絶賛作業中のファイルだったとき、作業途中の内容をコミットすることもできず、なくなく削除して修正をした、苦い思い出はないでしょうか?
そんなときに、「スタッシュ(stash)」機能を利用することで、回避することができるかもしれません。
現在の作業を「退避」させる
「スタッシュ」は、コミットできない現在作業中の内容を、一時的に「退避」させてくれる機能です。
(1)コミット前のファイルをスタッシュする
「割り込み」の作業をする前に、現場の作業を進めていた、ファイルを「スタッシュ」します。
コミットをしてしまうと意味がありませんので、コミット前に「スタッシュ」ボタンをクリックします。
【注意】
「スタッシュ」は、現在「ファイルステージ」に表示されているものを、すべて「退避」させてしまいます。
事前に、コミットが必要なファイルや、不要なファイル、無視するファイルがある場合は、「スタッシュ」前に対応するようにします。
(2)スタッシュファイルにメッセージを残す
どういったファイルがスタッシュされているのかを、メモとして残します。
メッセージが残っていないと、あとで戻す時に困りますので、簡単なメッセージを残しておきましょう。
(3)「割り込み」作業を行う
スタッシュを行ったことにより、「ファイルステージ」が空になります。
同時に、これまで作業していた内容がすべて、作業前に戻ります。
イメージとしては、スタッシュをしたことにより「ファイルステージ」に上がっていたファイルを全て「リセット」したときのような状態になります。
これで、割り込み作業が行なえます。
(4)「割り込み」作業をコミットする
「割り込み」作業が終れば、コミットをしておきましょう。
「割り込み」作業が終れば、「スタッシュ」で退避させていた作業の続きができますね。
(5)「スタッシュ」ファイルを元に戻す
「スタッシュ」したファイル群は、左メニューの「一時退避」の中にあります。
先程、「スタッシュ」したメッセージに右クリックします。
「退避した変更を適用」をクリックして、「スタッシュ」内容を反映します。
あとは、作業の続きをしましょう。
「スタッシュ」の罠
非常に便利な機能で、社内でも活用していきましょうと話をしていますが、1つ大きな注意点があります。
それは、高確率で「競合(コンフリフト)」が発生する点です。
スタッシュの適用は、もともと表示されていた場所に復元しようとします。
復元場所に変更がなければ問題ありませんが、変更があった場合は「競合(コンフリフト)」とみなされ、ステージ上にとどまってしまいます。
さらに、「スタッシュ」で発生する「競合(コンフリフト)」は、どちらも適用させないといけない内容のため「優先させる」ということができません。
残念ながら、この場合、両方の内容を反映させて「競合(コンフリフト)」時に追記されるゴミコードを削除して、成形させる必要が出てきます。
ゴミコードの削除漏れがないように注意してください。
まとめ
「スタッシュ」機能は非常に便利ではありますが、「大掛かりな割り込み」のときは「競合(コンフリフト)」の嵐に巻き込まれる可能性があります。
使い所を注意しつつ、便利に利用することで作業効率を上げられる1つの方法となります。
また、Gitの普段使っていない機能に関してご紹介したいと思います。
では!