1. ホーム
  2. git

なぜ私のgitの履歴はクリスマスツリーみたいなのですか?

2023-12-01 10:41:44

質問

を行う場合 git log --decorate --oneline --graph を実行したところ、次のような構造が現れました (祭りのテーマを強調するために回転させています)。

コミットグラフのこのパターンはどのようにして生まれたのでしょうか?

もちろん、これは意図的なもので、少々馬鹿げていますが、ここには興味深い点があります。コミットグラフの特定のパターンを git 履歴ブラウザで見たときに、それをどう解釈すればいいのかがわからないことがよくあります。

どのように解決するのですか?

この事例では、コミットされないコミットが master ブランチの先端にプッシュされていないコミットがあったということです。 すると git pull は同じリポジトリで何度も実行され、上流で新しい作業がたくさん行われるようになりました。 (この場合、自動化されたスクリプトが原因で発生しましたが、開発者がブランチを最新に保つために、たとえばリベースではなく、ブランチに繰り返しプルする場合にも同じことが起こり得ます)。

上流で新しいコミットがあったときにプルするたびに、新しいマージコミットが作成されます。 master にないコミットが master になかったものです。

やがて、このリポジトリの master ブランチからの履歴が上流にプッシュされたため、他の開発者は次に上流リポジトリからプルしたときに、コミットグラフにこの構造が突然現れるのを見ることになりました。

もし同じような構造の履歴があり、どのコミットや開発者がこの問題を引き起こしたのかを知りたければ、星印のある行を最初の非マージコミットにたどり着くまで(基本的にすべてのマージの最初の親を追って)見ていけばよいのです。 この写真の場合、それは b275805 - であり、本来ならもっと前にプッシュされているべきコミットです。

これが、人々がしばしば git pull --rebase - を使うのが好まれる理由のひとつです。

私の同僚である マシュー・サマーヴィル がこれを発見し、何が起こっているのかを突き止めたのです。