[解決済み] なぜ git merge はコミットを作成するときとしないときがあるのですか?
質問
私が
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での作業が信じられないほど簡単になります :)
関連
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] Git リポジトリを以前のコミットに戻すにはどうすればよいですか?
-
[解決済み] Git リポジトリでのマージの衝突を解決するには?
-
[解決済み] まだプッシュされていない Git マージを元に戻す
-
[解決済み] git rebase の取り消し
-
[解決済み] Git で現在のブランチ名を取得するには?
-
[解決済み] Gitブランチをmasterにマージする最も良い(そして最も安全な)方法は何ですか?
-
[解決済み] 現在のGitブランチをmasterブランチにする
-
[解決済み] Git で、別のブランチの変更を選択的にマージしたり選択したりするにはどうすればよいですか?
-
[解決済み] Git で最新のコミットを新しいブランチに移動する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
エラーが発生しました。マージされていないファイルがあるため、プリングはできません
-
fatal: リモート参照マスタが見つかりませんでした。
-
git pushで "Updates were rejected because your current branch is behind "というエラーが報告される。
-
Git エラー: ヒント: リモートにあなたが持っていない作業が含まれているため、更新が拒否されました ヒント: あなたが持っていない作業です。
-
[Gitラーニングノート】Gitのコンフリクト:マージする前に変更をコミットするかstashする。
-
fatal: パス仕様 'readme.txt' がどのファイルにもマッチしなかった Solution
-
gitの利用(ssh鍵の作成とgithubの利用)。
-
[解決済み] Jenkins Pipeline Git SCM を認証情報でチェックアウトする?
-
[解決済み] ローカルレポとリモートレポを接続する
-
[解決済み] GitとSSH、どちらのキーを使うか?