ホームページ  >  記事  >  開発ツール  >  git におけるブランチとは何を意味しますか?

git におけるブランチとは何を意味しますか?

青灯夜游
青灯夜游オリジナル
2021-12-29 17:16:2514488ブラウズ

git では、ブランチとは、他の操作を実行するためにメインラインから分離されることを指します。メインラインには影響せず、メインラインは作業を続行できます。一時的な問題を解決するために使用できます。必要; ブランチが完了したとき メインラインにマージでき、タスクが完了したらブランチを削除できます。

git におけるブランチとは何を意味しますか?

このチュートリアルの動作環境: Windows 7 システム、Git バージョン 2.30.0、Dell G3 コンピューター。

git のブランチとは

名前が示すように、ブランチはメインラインから分離されており、システムに影響を与えることなく追加の操作を実行します。メインライン。作業を続行できます。スレッドに似ていますね? 最後のブランチが完了すると、メインラインにマージされ、ブランチのタスクが完了して削除できます。これはとても便利ではないでしょうか? 本線は業務を継続し、支線は一時的なニーズを解決するために使用され、この 2 つは互いに何の関係もありません。

git のブランチ関数は特に強力です。すべてのデータをコピーする必要はありません。ブランチの送信オブジェクト (コミット) の作成を開始する必要がある場所を指すブランチ ポインターを再作成するだけで済みます。を変更して送信すると、新しいブランチのポインタは最新のコミット オブジェクトを指し、元のブランチのポインタは元の開発の場所を指します。どのブランチで開発するとき、HEADそのブランチの最新のコミット オブジェクト commit を指します。はっきりと理解できなくても大丈夫、最初はこういう概念があって、後から徐々に理解できるようになります。

ブランチの作成とマージ

コマンド git Branch を使用して、git ウェアハウスにブランチがいくつあるかを確認できます。現在、 working 現在どのブランチにいるのか、その前に * が付いているブランチが現在いるブランチです。 git ブランチ名というコマンドを実行することでブランチを作成できます。このブランチのポインタは最新のコミット オブジェクトを指します。このオブジェクトは HEAD と同じオブジェクトを指します。コマンド git checkout name を使用して宛先ブランチに切り替えることができます。デフォルトのメイン ブランチは master です。ブランチを作成して切り替える場合、実際には、ポインタを見つけるためのポインタを作成し、見つかったポインタが指すコミット オブジェクトを見つけて、コミット オブジェクトが指すファイル スナップショットにワークスペースを復元するだけの簡単な作業です。私たちが働くために。一度送信すると、ポインタは最後に送信されたオブジェクトを再度指すようになります。これは非常に簡単です。

ブランチ teset を作成すると、図 1 に示すように、マスター ブランチが 1 つだけ存在します。すべての開発はこのブランチ上で行われ、HEAD は次を指します。最新のコミット オブジェクト c3、c3 には、以前の 2 つのコミット c1 と c2 があります。このとき、図 2 に示すように、git ブランチ テストを通じてテスト ブランチを作成します。この時点では、HEAD はまだ最新のコミット c3 を指しています。 git チェックアウト時 test が test ブランチに切り替わった後、HEAD は test ブランチの最新のコミット c3 を指しますが、このとき実際には .git 内のすべてのファイルが同じデータ c3 を指します。

## 現時点では、テスト ブランチで数回開発し、c4 および c5 バージョンを送信すると、テストと HEAD の両方がテスト ブランチの最新バージョンを指します。図 3 に示すように c5 を送信しますが、この時点ではマスターは変更されておらず、まだ c3 を指しています。この時点でテスト ブランチがマスター ブランチにマージされている場合、git は何もする必要がありません。マスターを c5 を指すように移動するだけで済みます。このプロセスは早送りと呼ばれます。この時点でテスト タスクが完了している場合は、 git Branch -d test を使用してタスクを削除し、メイン ブランチ マスターで開発を続行できます。この場合、テスト ブランチは無駄に構築されます。

したがって、この時点で master ブランチで別の開発が実行され、2 つのバージョン c6 と c7 が送信された場合、この時点の master および HEAD ポインターは c7 を指します。 , 図4のように、どのブランチで開発されているかがわかり、HEADはどのブランチのコミットを指しているのですが、このとき2つのブランチをマージすると以下のようになります。


図 5 に示すように、最初に master ブランチに切り替え、次に git merge test を通じて test ブランチを master ブランチにマージします。この時点では、git は単にポインタを移動するだけではなくなります。両方の側なので、git は必要です。2 つのブランチの最新のコミット c5 と c7、および 2 つのブランチの共通の祖先コミット オブジェクト c3 は、単純な 3 者間マージを実行し、新しいファイル スナップショットを生成し、新しいファイル スナップショットで記録する必要があります。オブジェクト c8 をコミットします。このマージ プロセスにはあまり注意を払う必要はありません。競合が発生した場合、つまり 2 つのブランチが同じファイルを変更した場合、git はマージ操作を停止し、競合を処理できるようにします。送信 (c8) してからマージします。この時点では、マスターと HEAD の両方が c8 を指していますが、テストは移動されていません。この時点で、テストで開発を続行し、それをマスターにマージできます。テストが役に立たなくなった場合は、削除できます。 。

ローカル ブランチ、トラッキング ブランチ、リモート ブランチ

ここには 3 つの概念があります。ローカル ブランチは、git ブランチを通じて表示できるブランチです。つまり、独自の git ウェアハウスが所有するすべてのブランチを使用できます。リモート ブランチはリモート ウェアハウスのブランチのインデックスです。実際にはローカル ブランチですが、移動することはできません。中央サーバーと対話し、サーバーによってローカルに更新されたコードに基づいて移動する必要があります。の機能リモート ブランチは最後に対話したものであり、中央サーバーの対話型更新によって取得された最新バージョンもポインタになります。追跡ブランチは理解しにくいです。これはローカル ブランチでもありますが、リモート ブランチに対応します。ローカル ブランチの 1 つが特定のリモート ブランチに対応する場合、それは追跡ブランチです。たとえば、元のマスター ブランチは次のようになります。追跡ブランチ リモート ブランチのオリジン/マスターに対応するブランチ (オリジンはリモート ウェアハウスの名前です) ブランチを指定せずにマスター ブランチで更新 (フェッチ、プル) またはプッシュ (プッシュ) を実行すると、デフォルトは、origin/master ブランチが更新されるか、origin/mster ブランチに送信されます。


図 7 と図 8 から、オリジン/マスター リモートが異なる点を除いて、ローカル ブランチの作成とよく似ていることが簡単にわかります。ブランチはサーバーにのみ接続できます。また、図 9 に示すように、移動する前にサーバー コードをローカルに更新します。


ブランチを更新するには 2 つのコマンドがあります。リモートコードをローカルに、フェッチしてプルし、フェッチはローカルに更新されますが、マージ操作は実行されません。自分で確認し、競合などを解決してから、自分でマージを実行してマージする必要があります。更新されたコードは独自のブランチに追加されますが、プルではこれら 2 つの操作が結合されます。ワン ステップで、サーバー コードを直接更新し、ローカルの指定されたブランチにマージします。もちろん、競合が発生した場合は、自分で解決する必要があります。そのため、通常はフェッチを使用して更新を実装しますが、少し面倒ではありますが、問題は発生しにくいです。

ローカル コードをリモート ウェアハウス (つまり、中央サーバー) にプッシュします。通常、プッシュするデータは git Push Origin master:master です。ここでは、リモート ウェアハウス名、ローカル ブランチ名、およびリモート ブランチを指定しますつまり、ローカルのマスター ブランチのデータが、リモート ウェアハウスのオリジンのマスター ブランチにプッシュされます。ローカルマスターブランチが追跡ブランチの場合、指定されていない限り、リモートウェアハウス内の対応するブランチを見つけてデータをプッシュします。または、git プッシュ起点操作を直接実行し、リモート ウェアハウス名のみを指定すると、git は現在いるブランチと、それに対応するリモート ウェアハウスのブランチに基づいてデータをプッシュします。追跡ブランチ。もちろん、 git Pushorigin:master であれば、ここのローカル ブランチ名は空ですが、この操作は空のブランチをリモート ウェアハウスの master ブランチにプッシュすることであり、その結果、master ブランチが削除されます。

追跡ブランチは非常に使いやすいので、どのように追跡ブランチを作成すればよいでしょうか? 方法は 2 つあります。1 つ目は、リモート ブランチを根絶して追跡ブランチを作成することです。追跡ブランチの名前を指定しない場合は、ブランチ、デフォルトはリモートです。ウェアハウスのブランチ名は同じです: git checkout --trackorigin/test したがって、test という名前の追跡ブランチを作成します。追跡ブランチの名前を変更する場合: git checkout -b nameorigin/testでは、リモート リポジトリのテスト ブランチに対応する、name という名前の追跡ブランチを作成します。 2 番目の方法は、ローカル ブランチが既に存在しており、それをリモート ブランチに対応させて追跡ブランチにする場合です。また、使用できるコマンドが 2 つあり、git Branch --set-upstream testorigin/test または git Branch です。 -f - -track testorigin/test ここでは、ローカルの既存のテスト ブランチをリモート テスト ブランチに追跡させます。

git ブランチ管理

ブランチの作成とブランチの git マージは非常に簡単かつ高速なので、開発プロセス中にブランチを非常に使用できます。また、git の核となるゲームプレイの 1 つはブランチです。ブランチの使用は強く推奨されますが、可能です。ブランチについてですが、たくさんブランチを作った場合はどうすればよいでしょうか? ブランチは多すぎるのではなく、ちょうどいい量です。あまり多くブランチを作りすぎると管理が面倒になるので、ブランチ管理戦略、git-flow、およびブランチ管理戦略の推奨についても説明します。この戦略について学ぶには、この記事を読んでください: http://nvie.com/posts/a-いかに成功したか -git-branching-model/ を使用してください。 git の方が便利です。

推奨学習:「Git チュートリアル

以上がgit におけるブランチとは何を意味しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。