1. ホーム
  2. git

[解決済み] なぜ git merge はコミットを作成するときとしないときがあるのですか?

2023-07-16 01:34:32

質問

私が git merge を別のブランチから現在のワークスペースに実行すると、git は時々新しいコミットを作成します。

Merge remote-tracking branch xxx into xxx

そうでない場合もあります。

Fast-forward
... src files ...

では、コミットを作成すべきかどうかは何によって決まるのでしょうか?

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

いわゆる "Fast-forward" と呼ばれるマージはコミットを生成しませんが、その他のマージ(しばしば "octopus merge" と呼ばれます(github のマスコットが octocat である理由がわかりましたね))ではコミットを生成することがあります。

基本的に、Fast-forwardはブランチが分岐しなかったときに起こります。

あるブランチをマージしたいとします foo の中に master というブランチがあります。もしこれらのブランチが分岐していなければ、次のような履歴になります (それぞれの * はコミットを表します)。

*---* (master)
     \
      *---*---* (foo)

このような場合、マージは 早送り というのは、(gitグラフの基礎となるグラフ理論によれば)。 master から到達可能だからです。 foo . 言い換えれば、あなたは単に master への参照を foo を参照し、完了です。

*---*
     \
      *---*---* (master, foo)

ブランチが分岐したとき

*---*---* (master)
     \
      *---*---* (foo)

2つのブランチを結合するために、コミットを作成する必要があります。

                ↓
*---*---*-------* (master)
     \         / 
      *---*---* (foo)

矢印で示されたコミットはマージコミットで、2つの親コミット(前者の master ブランチの先端と、現在の foo ブランチ・チップ)。

早送りマージのためのマージコミットを作成するよう Git に強制するには --no-ff オプションで強制的にマージコミットを作成することができます。

を読むことを強くお勧めします。 http://think-like-a-git.net/ を読むことを強くお勧めします。グラフ理論がどのようにgitに適用されるかをよく理解することができ、(グラフ理論を知る必要はありません。必要なことはすべてウェブサイトに書かれています。) Gitでの作業が信じられないほど簡単になります :)