この記事は、Git ブランチについて学習し、ブランチを使用するための Git Merge コマンドを紹介するのに役立ちます。
Git では、マージはフォークされたコミット履歴を元に戻す方法です。 git merge
コマンドは、以前に git Branch
コマンドを使用して作成したブランチと、このブランチ上で個別に開発されたコンテンツを 1 つのブランチに統合するために使用されます。
以下のすべてのコマンドは、他のブランチを現在の作業ブランチにマージすることに注意してください。現在の作業ブランチの内容はマージ操作により更新されますが、ターゲット ブランチはまったく影響を受けません。繰り返しますが、これは、git merge
が通常、現在の作業ブランチを選択するための git checkout
コマンドの使用や、git ブランチの使用など、他のいくつかの git コマンドと組み合わせて使用されることを意味します。 d
マージされた放棄されたブランチを削除するコマンド。
仕組み
git merge
は、複数のコミット シーケンスを統合されたコミット履歴にマージします。最も一般的な使用シナリオでは、git merge
を使用して 2 つのブランチをマージします。このドキュメントの残りの部分では、このマージ シナリオに焦点を当てます。このシナリオでは、git merge
は 2 つのコミット ポインター (通常は 2 つのブランチの先頭のコミット) を受け入れ、2 つのブランチの最新の共通コミットまで前方トレースします。この共通のコミットが見つかると、Git は両方のブランチのそれぞれのコミット シーケンスをマージする新しい「マージ コミット」を作成します。
たとえば、main
ブランチから派生した機能ブランチがあり、この機能ブランチを main
ブランチにマージして戻したいと考えています。
マージ コマンドを実行すると、指定されたブランチが現在の作業ブランチにマージされます。現在の作業ブランチは main
であると仮定します。 Git は、2 つのブランチに基づいてコミットをマージするための独自のアルゴリズムを決定します (詳細は以下で説明します)。
マージ コミットには 2 つの親コミットがあるため、マージ コミットは通常のコミットとは異なります。マージ コミットを作成すると、Git は 2 つの別々のコミット履歴を 1 つに自動的にマージしようとします。ただし、Git は、特定のデータに両側のコミット履歴の変更が含まれていることを検出した場合、それを自動的にマージすることはできません。この状況はバージョン競合と呼ばれますが、現時点では、Git はマージを続行するために手動介入を必要とします。
マージの準備
実際のマージ操作の前に、マージ プロセスがスムーズに進むようにいくつかの準備手順を実行する必要があります。
マージを受け取るブランチを確認する
git status
コマンドを実行して現在のブランチのステータスを確認し、HEAD
であることを確認します。マージ ブランチを受け取る正しいブランチを指します。そうでない場合は、git checkout
コマンドを実行して、正しいブランチに切り替えます。この例では、git checkout main
を実行します。
最新のリモート コミットを取得する
マージ操作に関与する両方のブランチがリモート ウェアハウスの最新ステータスに更新されていることを確認します。 git fetch
を実行して、リモート ウェアハウスから最新のコミットをプルします。フェッチ操作が完了したら、main
ブランチがリモート ブランチと同期していることを確認するために、git pull
コマンドを実行する必要があります。
合併
上記の準備が完了すると、正式に合併を開始できます。 git merge <branch></branch>
コマンドを実行します。ここで、 は現在のブランチにマージする必要があるターゲット ブランチの名前です。
早送りマージ
現在の作業ブランチとマージ先ブランチ間の送信履歴が直線パスの場合、早送りマージを実行できます。この場合、実際に 2 つのブランチをマージする必要はなく、Git は現在のブランチの先頭ポインタをターゲット ブランチの先頭に移動 (つまり、早送り) するだけで済みます。この場合、早送りマージによってコミット履歴が 1 か所にマージされ、ターゲット ブランチのコミットが現在のブランチのコミット履歴に含まれるようになります。関数ブランチを main
ブランチに早送りマージするプロセスについては、次の図を参照してください。
ただし、早送りマージは 2 つのブランチが分割されるときに発生しますが、クロスの場合は実行できません。現在のブランチに対するターゲット ブランチのコミット履歴が線形でない場合、Git は 3 方向マージ アルゴリズムを通じて 2 つのブランチをマージする方法しか決定できません。 3 方向マージ アルゴリズムでは、両側のコミット履歴を統合するために専用のコミットを使用する必要があります。この用語は、Git がマージ コミットを生成するには、2 つのブランチの最上位コミットとそれらの共通の祖先コミットの 3 つのコミットを使用する必要があるという事実に由来しています。
実際にはこれらのさまざまなマージ戦略を使用することを選択できますが、ほとんどの開発者は、特に小規模な機能の開発やバグ修正の場合、(rebasing コマンドを使用する) 早送りマージを好みます。長期的な開発機能ブランチをマージする場合は、3 方向マージ方法の方が適しています。 2 番目のシナリオでは、マージによって生成されたマージ コミットは、2 つのブランチのマージのマークとしてコミット履歴に保持されます。
次に、以下の最初の例を使用して、早送りマージを実行する方法を示します。次のコマンドは、まず新しいブランチを作成し、新しいブランチ上で 2 つのコミットを作成し、次に早送りマージを使用して新しいブランチを main
ブランチにマージします。
# Start a new feature git checkout -b new-feature main # Edit some files git add <file> git commit -m "Start a feature" # Edit some files git add <file> git commit -m "Finish a feature" # Merge in the new-feature branch git checkout main git merge new-feature git branch -d new-feature
この例のワークフローは通常、短期的な機能開発に使用されます。この開発プロセスは比較的独立した開発プロセスとみなされ、それに応じて調整と管理が必要な長期的な開発プロセスです。 . 機能開発ブランチ。
また、この例では、new-feature のコンテンツがメイン ブランチにマージされているため、Git は git Branch -d
コマンドに対して警告を発行しないことにも注意してください。
場合によっては、ターゲット ブランチのコミット履歴は現在のブランチに対して線形であり、早送りマージできますが、この時点でマージが行われたことをマークするマージ コミットが必要な場合もあります。 git merge
コマンドを実行するときに、--no-ff
オプションを使用できます。
git merge --no-ff <branch>
上記のコマンドは、指定されたブランチを現在のブランチにマージしますが、常にマージ コミットを生成します (このマージ操作が早送りできる場合でも)。このコマンドは、リポジトリのコミット履歴でマージ イベントをマークする必要がある場合に便利です。
3 方向マージ
次の例は上記と似ていますが、機能ブランチが進むにつれて main
ブランチ自体も変更されるため、3 方向のマージが行われます。マージする場合は -way merge が必要です。このシナリオは、大規模な機能開発を実行する場合、または複数の開発者が同時に開発を行う場合に非常に一般的です。
Start a new feature git checkout -b new-feature main # Edit some files git add <file> git commit -m "Start a feature" # Edit some files git add <file> git commit -m "Finish a feature" # Develop the main branch git checkout main # Edit some files git add <file> git commit -m "Make some super-stable changes to main" # Merge in the new-feature branch git merge new-feature git branch -d new-feature
この場合、main
の先頭ポインタを new-feature## に直接移動する方法がないため、Git は早送りを実行できないことに注意してください。 # ブランチをマージします。
新機能は非常に大きな機能であるはずであり、開発プロセスは長時間にわたるため、必然的に
新しい機能もありますmain ブランチにコミットします。 feature ブランチのサイズが上記の例のように小さい場合は、リベースを使用して
new-feature ブランチを
main ブランチにリベースしてから、早送りマージを実行できます。これにより、プロジェクトのコミット履歴に過剰な冗長性が生じることも避けられます。
git status コマンドを実行すると、どのファイルに競合が含まれており、手動で解決する必要があるかがリストされます。たとえば、両方のブランチが
hello.py ファイルの同じ部分を変更すると、次のような情報が表示されます。
On branch main Unmerged paths: (use "git add/rm ..." as appropriate to mark resolution) both modified: hello.py競合の表示方法When Git はマージ プロセス中に競合に遭遇すると、影響を受けるファイル内の関連コンテンツを編集し、競合のこの部分の異なるコンテンツを示す視覚的なマーカーを追加します。これらの視覚的マーカーは次のとおりです: >>>>>>。競合が発生した特定の場所を見つけるには、ファイル内でこれらの視覚マーカーを検索するのが簡単です。
here is some content not affected by the conflict <<<<<<< main this is conflicted text from main ======= this is conflicted text from feature branch >>>>>>> feature branch;一般的に、====== マークの前のコンテンツはマージを受け取るブランチから取得され、その後のコンテンツはマージされるブランチから取得されます。 競合する部分が見つかったら、必要に応じて競合を修正できます。競合の修復が完了し、マージを続行する準備ができたら、
git add コマンドを実行して、競合が解決されたファイルをステージング領域に追加し、これらの競合が解決されたことを Git に伝えるだけです。この後、通常のコード送信と同様に
git commit を実行してマージコミットを完了します。このプロセスは、通常の状況でコードを送信するのとまったく同じです。つまり、競合の処理は一般の開発者にとって簡単なことです。
概要
この記事は、git merge
コマンドの概要です。 Git を使用するプロセスにおいて、マージは非常に重要な操作です。この記事では、マージ操作の背後にある仕組みと、早送りマージと 3 方向マージの違いについて説明します。読者が覚えておく必要がある重要なポイントは次のとおりです。
- #Git マージ プロセスは、さまざまなコミット シーケンスを統合されたコミット履歴にマージすることです # #Git マージ プロセスには、早送りマージと 3 方向マージという 2 つの主な方法があります。
- 2 つのコミット シーケンスに競合がない限り、Git は通常、コミットをマージできます。自動的に
- 推奨学習: 「
以上がGit の学習: git merge コマンドを理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Gitはバックエンドバージョン制御システムであり、GithubはGitに基づくフロントエンドコラボレーションプラットフォームです。 GITはコードバージョンを管理し、GitHubはユーザーインターフェイスとコラボレーションツールを提供し、2つは開発効率を向上させるために協力します。

Gitはバージョン制御システムであり、GithubはGitベースのコードホスティングプラットフォームです。 GITはコードバージョンと履歴を管理するために使用され、GitHubはコードホスティングとコラボレーション機能を提供します。 GITは、バージョン制御を必要とするすべてのプロジェクトに適しています。Githubは、チームのコラボレーションやオープンソースプロジェクトに適しています。

Gitは分散バージョン制御システムであり、GithubはGitに基づいたオンラインプラットフォームです。 GITは、支店管理やコミット履歴などのバージョン制御機能を提供します。 GitHubは、コードレビューやプロジェクト管理などのコラボレーションツールを提供しています。

GitとGithubは、最新のソフトウェア開発のコアツールです。 Gitは分散バージョン制御システムであり、Githubはコラボレーションプラットフォームです。 GitとGithubを使用すると、開発効率を向上させ、チームのコラボレーションを強化できます。

Gitは2005年にLinus Torvazによって作成された分散バージョン制御システムですが、GithubはGitに基づくオンラインコラボレーションプラットフォームです。 GITレコードは、スナップショットを介してファイルの変更を記録し、ブランチモデルをサポートします。 GitHubは、コラボレーション効率を向上させるためのPullRequestなどのツールを提供します。

GitHubは単なるバージョン制御ツールではなく、コラボレーション、プロジェクト管理、コミュニティコミュニケーション機能も提供しています。 1)バージョン制御:Gitを使用してコードの変更を追跡します。 2)コラボレーション:PullRequestを通じてコードの変更を送信します。 3)プロジェクト管理:問題とプロジェクトセクションを使用して、タスクを管理します。 4)コミュニティコミュニケーション:フォークを通じて学び、コミュニケーションを取り、オープンソースプロジェクトに参加します。

GitとGithubは異なるツールです。Gitはバージョン制御システムであり、GithubはGitに基づくオンラインプラットフォームです。 GITはコードバージョンを管理するために使用され、GitHubはコラボレーションとホスティング機能を提供します。

GitHubは、GITに基づいた分散バージョン制御システムであり、バージョン制御、コラボレーション、コードホスティングのコア機能を提供します。 1)リポジトリの作成、クローニング、コミット、および変更の作成が基本的な使用法です。 2)高度な使用法には、自動化にGitHubactionsの使用、GitHubpagesに静的Webサイトの展開、セキュリティ機能を使用してコードを保護することが含まれます。 3)競合のマージ、許可の問題、ネットワーク接続の問題などの一般的なエラーは、競合を手動で解決し、倉庫の所有者に連絡し、プロキシを設定することでデバッグできます。 4)ワークフローを最適化する方法には、分岐戦略の使用、自動テストとCI/CDの使用、コードレビュー、およびドキュメントと注釈の維持が含まれます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SublimeText3 中国語版
中国語版、とても使いやすい

Dreamweaver Mac版
ビジュアル Web 開発ツール

ホットトピック









