30
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

featureブランチのGitマージは頼むからSquashを使ってくれ

Last updated at Posted at 2018-09-30

結論

個人のfeatureブランチからのマージは Squash and Merge する。


Squashマージって何ですか?

多くの記事で扱っているため、本記事では省略します。

なぜSquashをつかうべきなのか?

バージョン管理上見えなくてよい個人の作業記録をツリー上から無くせる

以下は Create a Merge commitしてfeatureブランチをマージした後のツリー。

作業の詳細なステップを含め、ツリーにすべての過程が残ってしまいます。

  • 細かい作業コミットによってツリー全体が長くなってしまう
    • 1つ1つの作業に加えてfeatureブランチの表現も残すため、縦にも横にも長くなる
  • コメントの粒度がまちまちで見づらい
    • 本来は作業コミットのコメント1つ1つに気を使ってほしいが そこまで縛るのは難しい
    • 人によっては常に同じコミットコメントだったりしてカオス...

Approveされた作業単位でまとまって見やすい

以下は Squash and Mergeしてfeatureブランチをマージした後のツリー。

releaseブランチに5つのfeatureブランチを順次マージしたあとの図です。
知りたい情報だけが整列していてノイズが少なく、とっても見やすいですよね。

  • Pull Requestの単位でコミットログが作られる
  • featureブランチ内で行った作業コミット・バックマージなどが消え、ツリーがシンプルに保たれている

もちろん Pull Requestのタイトルがわかりやすいことが前提ですが :joy:

ただし、副作用を知っておく

頭ごなしに「Squashいいぞ」というわけでもないことを知っておこう。

Squashを乱用するとConflictして苦労する

コミット履歴(元のブランチとの関係)が残らないため、バックマージを必要とするブランチにSquash and Mergeを適用してしまうとソースコードの変更の前後関係が不明となりほぼ全行のコードでConflictをおこして大変な事になってしまう。

あくまで個人のfeatureブランチのみでSquash and Mergeを使用することをオススメする。

1Pull Request上で複数人がコミットをするようなケース (OSSなど)

ここまで聞くと「featureブランチならすべてSquashだろ!」と言い出しそうですが、手放しにそうとも言えないようだ。

ここで紹介する副作用はSquashマージすることによりコントリビュートが消えてしまう問題。

OSSでSquash and MergeをするときはPull Requestが個人の作業に閉じているかを確認した上で実施したほうが良さそうだ。

まとめ

  • 個人の作業ブランチはSquash and Mergeして、プロジェクトのソースコードツリーをシンプルに保つ心がけをしよう
  • Squashの副作用を把握して事故をなくそう
30
27
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?