WithOne AdventCalendar 7日目の記事です。
本日のテーマはGitです。
私のローカルにおけるGitの運用を記事にしてみました。
ブランチ専用のスタッシュが欲しい
Gitを使っていてこんなことを思ったことはないでしょうか?
日常的に複数のブランチで作業している人の1000人に1人くらいは思ったことのある悩みだと思います。
複数ブランチを使用しない人にも伝わるように、
たとえば私の場合はこんなときに複数ブランチで作業してました
- 機能の実装に詰まったので、気分転換に別のブランチで別機能に着手した
- レビューのために複数のブランチを同時並行で作業する必要があった
スタッシュで困ること
スタッシュが少しなら困らないんですが
- 複数ブランチのスタッシュが混在してたり
- ローカルな接続先に切り替える用のスタッシュを用意してたり
- 使用済みスタッシュのゴミが散乱してる
などの要因でスタッシュがたくさんあると、途端にめんどくさくなります
例えばこんなケース
機能α 作成中に、優先度が高い機能β の作成の割り込みがあった
大多数の人は
- 作業中の機能α をスタッシュに保存する
- developブランチに戻る
- 機能β のためのブランチを作成する
という流れで作業を開始するでしょう。
さて、機能β を無事に実装を終えたら
4. 機能α のブランチに戻る
5. スタッシュしておいた処理を適用する
という流れで戻ると思います
しかしこのスタッシュがごちゃついている場合は……
というのがこの投稿のテーマです。
コミットをスタッシュ代わりにしちゃうのはどうかな?
機能α 作成中に、優先度が高い機能β の作成の割り込みがあった
この先ほどのケースに対する流れを次のようにします。
- 作業中の機能α をコミットする
- developブランチに戻る
- 機能β のためのブランチを作成する
機能β を完了させる - 機能α のブランチに戻る
- 一つ前のコミットでリセットする(オプションはSoftで)
こうすることで、迷いなく機能α の実装に戻ることができます。
呼び名を決めよう
ブランチ専用のスタッシュとして、リセット前提のコミットのことを
以下、ブランチスタッシュと呼ぶことにします。
別の呼び方がいい人はお好きに読み替えてください。
GUIでやるとこんな感じ
赤枠で囲まれているのがブランチスタッシュです。 私のワークスペースを覗いたことがある人がいるかわかりませんが、いつもこんな感じです。普段はSourceTreeを使用していて、GUIでやると非常に簡単です。
戻したいブランチスタッシュの直前のコミットにカーソルを合わせて右クリックをすると次のようなメニューが出ます。
「このコミットまで XXX を元に戻す」を選択すると次のようなダイアログが出るので、
モードを選択して(SoftかMixed)OKを押すと、ブランチスタッシュした続きに戻ることができます。
使用上の注意
最後に、この運用方法は操作ミスで次のような事が起こり得ます。
- オプションをHardでリセットしてしまう
- 間違ってブランチスタッシュをプッシュしてしまう
- 他のブランチをプッシュするときに、ブランチスタッシュまでプッシュしてしまう
- ブランチスタッシュの存在を忘れて、その後ろにコミットしてしまう
これら状況で何が起こるか理解できない人にはオススメできない、そんな記事でした。