2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHubの草が生えないと思ったら、Squash mergeの罠だった話

2
Posted at

はじめに

個人開発で Spring Boot のポートフォリオを進めている最中、こんな違和感がありました。

「ここ数日、ちゃんとコミットして push しているのに、GitHub のプロフィールの草が全然増えない…」

ブランチにはコードは載っている。PR も作った。
転職活動を始めるためにGitHubを整理しようと思い、マージするのがなんとなく怖く感じていたあの頃(笑)のリポジトリも、mainにマージしないと草に反映されないと知り、過去に放置していたプライベートリポジトリも、まとめて main にマージした。

なのに、Contribution graph(いわゆる「草」)は空白のまま。

今更、GitHub の草のルールを理解して、めちゃくちゃショックだった —— その体験を残しておきます。


何が起きていたか

feature ブランチで作業していた

普段の流れはこんな感じでした。

feature ブランチで開発
    ↓
git add / commit / push
    ↓
(できたら PR)

feature/skill-record-edit のようなブランチに、学習記録の追加や学習時間の編集機能をコミットしていました。
ローカルでも GitHub のブランチページでも、コミットはちゃんと見えていました。

だから「反映はできている」と思っていた。

main はずっと止まっていた

一方、main ブランチの更新は 1週間以上前 のまま。

草を見ると、あたかも「何もしていない人」に見える。
実際には feature ブランチでかなり作業していたのに。

ここで初めて、「草って main 基準なのかな?」と気づき始めました。


今更知った GitHub の草のルール

調べてみると、草に載る条件は思っていたより厳しかったです。

① コミットは main(デフォルトブランチ)に入ったものだけ

feature ブランチに push しただけでは、草には載らない。

草に数えられるのは、だいたい次のどちらかです。

  • リポジトリの デフォルトブランチ(多くの場合 main
  • gh-pages ブランチ

「ブランチに push した = GitHub に反映した」は正しいけど、
「反映した = 草に載る」ではなかった、という話です。

参考: https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-github-profile/managing-contribution-settings-on-your-profile/why-are-my-contributions-not-showing-up-on-my-profile

② Squash merge だと、日付ごとの草は埋まらない

PR を作ってマージすれば草に載る——そこまでは理解しました。

でも、マージの仕方 によって見え方が全然違いました。

マージ方法 草の出方
Create a merge commit 各コミットの 元の日付 で載りやすい
Rebase and merge だいたい各コミットの日付で載る
Squash and merge マージした日の1マス にまとまる

Squash merge だと、6/28・6/29・6/30 に分散して作業していても、
7/3 にマージしたなら 7/3 の1日分 になりがちです。

空白だった日付は、後から埋まらない。

③ デフォルトが Squash になっていた

リポジトリの Settings → Pull Requests を見たら、

「Squash merge を許可する」にチェックが入っていた。

気づかないうちに Squash merge でマージしていた可能性が高いです。
個人開発だとレビューがない分、緑の「Merge pull request」を押すだけで終わりがち。
そのときデフォルトが Squash だと、毎回こうなる。

④ プライベートリポジトリは表示設定が別

プライベートリポジトリのコミットは、草に 数えられている ことがあっても、
プロフィールに 表示されない ことがあります。

Settings → Public profile → Include private contributions on my profile

ここにチェックがないと、「数えられているのに見えない」状態になります。

⑤ コミットのメールアドレスも大事

コミットに使っているメールアドレスが、GitHub アカウントに 登録・認証 されていないと、
main にマージしても草に出ないことがあります。

確認コマンド:

git log -1 --format='%ae'

で出てきたアドレスが、GitHub の Settings → Emails で Verified かどうかも要チェックです。


一番ショックだったこと

「過去に放置していたプライベートリポジトリも、草を増やすために main にマージしよう」

そう思って、いくつかマージしました。

なのに、空白だった日付の草は埋まらなかった。

たぶん理由はこれです。

  1. Squash merge だった(マージ日1日分に集約された)
  2. そもそも feature ブランチのまま で、main に入っていなかった repo もあった
  3. プライベート repo の 表示設定 が OFF だった

「マージすれば草が生える」は半分正しくて、半分間違いでした。

  • main に入る → 草の前提条件 ✅
  • 日付ごとに埋まる → Squash だと ❌
  • プロフィールに見える → プライベート設定次第

作業そのものが消えたわけではない。
でも 「ぱっと見何もしていない日が数日できている」 という意味では、かなり残念な体験でした。


これからやること

リポジトリ設定

✅ Allow merge commits        … ON(これを使う)
❌ Allow squash merging        … OFF(押し間違い防止)
✅ Include private contributions … ON(プライベート repo 用)

マージの習慣

  • 機能が 動く単位 で PR → Create a merge commit でマージ
  • 「草のためだけに壊れた main を作る」のは避ける
  • 「1機能できたらマージ」の方が、草も履歴もきれい

心の持ち方

草は モチベーションの可視化 には便利ですが、
学習の成果そのものではありません。

  • コミット履歴
  • PR
  • 動くアプリ
  • 本番環境

こっちにはちゃんと残っています。

ただ、ルールを知らないまま損をするのはもったいない ので、
今回の設定変更はしておいて正解だと思います。


まとめ

思っていたこと 実際
push すれば草に載る ❌ main に入ったコミットだけ
マージすれば空白の日が埋まる ❌ Squash だとマージ日1日分
過去 repo をマージすれば草が増える △ マージ方法と設定次第
作業は GitHub に反映されていない ❌ ブランチには載っている

遅れて気づいたけど、これからは merge commit でこまめに main に入れていこう。

同じように「草が増えない…」と悩んでいる人の参考になれば嬉しいです。


おまけ:自分用チェックリスト

マージ前にこれだけ見る。

  • デフォルトブランチは main か
  • マージ方法は Create a merge commit か(Squash じゃないか)
  • コミットメールは GitHub で認証済みか
  • プライベート repo なら private contributions 表示は ON か
  • アプリは起動する状態か

書いた日: 2026年7月3日
きっかけ: Spring Boot ポートフォリオの feature/skill-record-edit 開発中

2
0
0

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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?