ホームページ >テクノロジー周辺機器 >IT業界 >ジャンプ開始git:gitで分岐します
この記事は、SitePoint Premiumメンバーから無料で利用できる本「Jump Start Git」から抜粋されています。物理的な本は世界中の主要な書店で入手できます。また、ここで注文することもできます。あなたがそれを好み、それを恩恵を受けることを願っています!
第1章では、プロジェクトで新しいことを試すことへの最初の恐怖について話しました。野心的な機能を試してみて、以前に機能していた部分を破ったらどうでしょうか。 Gitの分岐機能は、この問題を完全に解決します。
キーポイントの概要概要
git branch [分支名称]
。このブランチに切り替えて、git checkout [分支名称]
を使用します。ブランチの削除はgit branch -D [分支名称]
を使用しますが、必要でない限りブランチを削除しないことをお勧めします。 git merge [分支名称]
ブランチとは何ですか?
プロジェクトに新しいブランチを作成することは、基本的にプロジェクトのコピーを作成することを意味します。このコピーを使用して、元のプロジェクトに影響を与えることなく実験できます。したがって、実験が失敗した場合は、それをあきらめて、元のプロジェクトであるメインブランチに戻ることができます。しかし、実験が成功した場合、Gitは実験要素をメインブランチに簡単に融合できます。そして、後で、気が変わった場合、マージの前にプロジェクトの状態に簡単に復元できます。
したがって、Gitの分岐は独立した開発パスです。他のブランチに影響を与えることなく、支店で新しいコミットを作成できます。ブランチの使いやすさは、Gitの最高の機能の1つです。 (他のバージョン制御オプション(CVSなど)にもブランチオプションがありますが、CVSでブランチをマージする経験は非常に退屈です。他のバージョン制御システムでブランチを使用した経験がある場合、GITでのブランチの使用は完全に異なることをご安心ください。 )
gitでは、デフォルトでメインブランチにいます。 「マスター」という名前は、それが決して優れているという意味ではありません。これは単なる従来のことわざです。
注:ブランチ契約さまざまなブランチをGitのベースブランチとして自由に使用できますが、人々は通常、メインブランチで特定のプロジェクトの最新コードを見つけることを期待しています。
コミットに戻る能力のために、ブランチは必要ないと主張するかもしれません。しかし、あなたがした仕事の一部ではない新しい機能を開発しながら、あなたの仕事を監督者に見せる必要があると想像してください。ブランチはさまざまなアイデアを分離するために使用されるため、リポジトリ内のコードを理解しやすくします。さらに、ブランチは、マスターまたはマスターブランチでのみ重要なコミットを保持することができます。
ブランチの別の使用は、互いに干渉することなく複数のものを同時に処理できることです。レビューのために機能1を提出したと仮定しますが、スーパーバイザーがそれをレビューするのに時間がかかるとします。同時に、関数2を処理する必要があります。この場合、ブランチは役に立ちます。新しいブランチで新しいアイデアに取り組んでいる場合は、いつでも以前のブランチに戻り、リポジトリを以前の状態に復元することができます。これには、アイデアに関連するコードが含まれていません。
ここで、Gitでブランチの使用を開始しましょう。使用しているブランチリストと現在のブランチを表示するには、次のコマンドを実行します。
<code>git branch</code>リポジトリをクローン化するか、リモートリポジトリをセットアップした場合は、リモートブランチも表示できます。上記のコマンドの後に-A:
を追加するだけです
<code>git branch -a</code>
上記のように、赤い枝は、それらがリモートリポジトリにあることを示しています。この例では、Origin Remote Repositoryに存在するさまざまなブランチを見ることができます。
gitにブランチを作成する方法はいくつかあります。新しいブランチを作成して現在のブランチに保持するには、次のコマンドを実行します。
ここで、
は作成されたブランチの名前です。ただし、<code>git branch test_branch</code>を実行した後、アクティブブランチはまだメインブランチであるようです。アクティブブランチを変更するには、チェックアウトコマンドを実行できます(以下に示すように):
test_branch
<code>git branch</code>
<code>git checkout test_branch</code>
上記の2つのコマンドを組み合わせて、チェックアウトコマンドの後に-bを追加して、1つのコマンドで新しいブランチを作成してチェックアウトすることもできます。
<code>git checkout -b new_test_branch</code>私たちが作成したブランチは、現在アクティブなブランチの最新のコミットに基づいています(この場合は主要なブランチ)。コミットに基づいてブランチ(例:
)を作成したい場合(例:)、次のコマンドを実行できます。
cafb55d
old_commit_branch
<code>git checkout -b old_commit_branch cafb55d</code>に変更するには、次のコマンドを実行します。
renamed_branch
<code>git branch</code>
注:必要でない限りブランチを削除しないでください
実際には、ブランチを保持するための欠点はないため、リポジトリ内のブランチの数が大きすぎて管理できない場合を除き、削除しないことをお勧めします。
上記で使用されているオプションは、ブランチがリモートブランチと同期されていない場合でも、ブランチを削除します。これは、現在のブランチにプッシュされていないコミットがある場合、-D
は警告なしにブランチを削除することを意味します。データを紛失しないようにするには、-D
の代替として-d
を使用できます。 -D
リモートブランチと同期されている場合にのみ、ブランチを削除します。私たちの枝はまだ同期していないので、以下に示すように、-d
を使用した場合に何が起こるか見てみましょう。
-d
ご覧のとおり、Gitはデータがブランチと統合されていないため、操作を中止します。
分岐の基本を試してみる機会があるので、枝がどのように機能するかを議論し、重要な概念を紹介しましょう:ヘッド。
上記のように、ブランチは、異なるコミット間の、またはコミットの経路を通る間の単なるリンクです。ブランチを使用する場合、ブランチのヘッドはブランチでの最新のコミットを指していることに注意する必要があります。次の章で何度か頭に言及します。 Gitでは、ヘッドはブランチでの最新のコミットを指します。言い換えれば、それはブランチの上部を指します。ブランチは、本質的に、親のコミット、祖父母のコミットなどを持つコミットへのポインターです。このコミットチェーンは、上記のパスを形成します。それで、枝と頭をリンクする方法は?さて、頭の上部と現在の分岐は同じコミットを指します。このアイデアを説明するためにチャートを見てみましょう:
上記のように、
は最初はアクティブなブランチであり、ヘッドポイントはCをコミットします。コミットAは、親がコミットしない基本コミットであるため、
でのコミットはE→D→B→Aです。ヘッドポイントアクティブブランチの最新のコミットbranch_A
、つまり、Cをコミットします。コミットを追加すると、アクティブブランチに追加されます。コミットした後、branch_A
はFを指し、ブランチはF→C→B→Aに続きますが、branch_B
は同じままです。ヘッドは今ではfをコミットすることを指します。繰り返しますが、別のコミットを追加すると、図に変更が示されます。 branch_A
branch_A
branch_B
Advanced Branch:マージブランチ
前述のように、GITの最大の利点の1つは、ブランチをマージするのが特に簡単であることです。それでは、それがどのように行われているか見てみましょう。
2つの新しいブランチを作成します(
とnew_feature
) - 仮想コミットを追加します。各ブランチの履歴をチェックすると、another_feature
ブランチが次のように1つのコミットメントをリードしていることがわかります。
another_feature
この状況は、下の図に示すことができます。各円はコミットを表し、ブランチ名は頭を指します(枝の上部)。
をメインブランチとマージするには、次のコマンドを実行します(最初にメインブランチがアクティブであることを確認してください):new_feature
<code>git branch</code>結果は、下の図に示すことができます:
とanother_feature
とマージするには、次のコマンドを実行するだけです(new_feature
ブランチがアクティブであることを確認してください):new_feature
<code>git branch -a</code>結果は、下の図に示すことができます:
重要なヒント:サイクルに注意を払ってください
上記の画像は、このマージが、ワークフローがそれぞれ分岐して収束するプロジェクト履歴に2つのコミットにわたってループを作成することを示しています。このようなループは、単独でまたは小さなチームで作業するときに問題ではないかもしれません。ただし、より大きなチームでは、メインブランチから逸脱して以来、多くのコミットがあるかもしれませんが、この大きなループにより、歴史をナビゲートして変化を理解することが困難になります。第6章でループを作成せずに、Rebaseコマンドを使用してブランチをマージする方法を検討します。
ブランチと比較してanother_feature
ブランチに新しいコミットは追加されません。 GITの競合は、同じファイルの同じ部分が両方のブランチの非公開コミットで変更された場合に発生します。 GITは競合を投げて、データを失わないようにします。 new_feature
ブランチをマージする別の方法は、マージコマンドの後に
を追加することにより、非高速なフォワードマージです。このようにして、別のブランチからの変更を加えて、基礎となるブランチに新しいコミットが作成されます。また、送信メッセージを指定する必要があります:--no-ff
<code>git branch</code>上記の例では、前者(メインブランチとのマージ
)は早送りのマージであり、後者はマージのコミットとの非高速なマージです。 new_feature
結論
何を学びましたか? この章では、枝が何であり、GITでそれらを管理する方法について説明します。ブランチの作成、変更、削除、およびマージを検討しました。
次は何ですか?私は、Gitがチームと協力する開発者にとってどのように良いかについてすでに話しています。これについては、次の章と、分散チームでよく使用される特定のGIT操作とコマンドについて詳しく説明します。
gitブランチに関するFAQgitブランチの主な目的は何ですか?
gitで新しいブランチを作成する方法は?
<code>git branch</code>
git branch new_feature
git checkout
gitでブランチをマージする方法は? git checkout new_feature
git merge
git checkout master
gitブランチポインターとは何ですか?それはどのように機能しますか? git merge new_feature
git branch -d
コマンドを使用してGITのブランチを削除し、その後のブランチの名前を使用します。たとえば、git branch -d old_feature
は「old_feature」という名前のブランチを削除します。ただし、ブランチに別のブランチに統合されていないコミットがある場合、Gitはブランチの削除を妨げます。削除を強制するには、-D
オプションを使用できます。
gitの早送りマージが可能です。新しいコミットを作成する代わりに、Gitは現在のブランチポインターをターゲットブランチまで移動します。一方、線形パスがない場合、三者マージが使用されます。 GITは、2つの親との新しいコミットを作成し、2つのブランチを効果的に接続します。
パラメーターなしで<code>git branch</code>コマンドを使用して、GITリポジトリ内のすべてのブランチを表示できます。これにより、すべてのローカルブランチがリストされます。リモートブランチも表示する場合は、次のように-a
オプションを使用できます。 <code>git branch -a</code>
コマンドを使用してGitのブランチを変更し、その後古い名前と新しい名前を変更します。たとえば、git branch -m
は、branch "old_name"に「new_name」に名前を変更します。 git branch -m old_name new_name
)を見つけ、どの変更を維持するかを決定することでこれを行うことができます。すべての競合が解決された後、<<<<<<<
を使用してファイルを追加してgit add
を使用して送信できます。 git commit
以上がジャンプ開始git:gitで分岐しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。