Git は、同じプロジェクトでの調整を容易にするために開発者の間で Linux で最も広く使用されている分散バージョン管理ソフトウェアの 1 つです。
Git に慣れていない場合は、Git のインストールと使用開始に関するこの入門ガイドを読むことをお勧めします。ここまでは、基本的な機能のみを示してきました。これらには、ワークスペースの準備とさまざまなリポジトリの作成、ファイルの「ステージング」と変更の「コミット」、および可能なファイルの削除または名前変更が含まれます。
次のステップはプロジェクトの異なるバージョン間を移動する方法を理解する。実際、ソフトウェアの性質が示唆するように、既存の作業から開始して新しい無限のリポジトリを作成する可能性は、すべて同じプロジェクトから派生したさまざまなパスのチェーンを必然的に作成します。
したがって、このガイドの目的は、さまざまなブランチをマージして以前のバージョンを復元しながら、さまざまなブランチ間を移動 (ブランチング) することにより、プロジェクトのバージョン管理を正しく管理する方法を説明することです。このガイドは主要な Linux ディストリビューションで有効であり、Ubuntu 18.04 でテストされています。
Git ブランチの使用
分岐は、Git の最も強力な機能の 1 つです。ブランチは、同じルートから開始して、互いに異なる独立した機能を実装するために使用されます。プロジェクトのメイン ブランチは、「リポジトリ」の作成時に生成され、「マスター」としてラベル付けされます。
リポジトリのさまざまなブランチ間を移動する方法を学ぶために最初に行うことは、「git checkout」コマンドを使用してから、作業するブランチを使用することです:
$ git checkout <branch>
たとえば、main ブランチに移動して作業するには、以下に示すように、コマンドの後に「master」を使用します。
$ git checkout master
リポジトリを作成するためのブランチが示されると、ファイルは作業フォルダー内の選択されたブランチの最後のステージに移動されます。その後、変更が加えられると、その特定のブランチの新しいプロジェクト バージョンが作成されます。
Git で新しいブランチを作成する
Git で新しいブランチを作成するには、「git branch」コマンドを使用し、その後に作成したブランチに付ける名前を指定します:
$ git branch <nome_ramo>
新しく作成されたブランチへの移動は自動ではありません。したがって、新しく作成されたブランチで作業するには、「git checkout」コマンドを使用します:
$ git checkout <nome_ramo>
この時点で、各コミットは新しく作成されたブランチを参照します。
図 1 では、次の操作が実行されます。
- 「マスター」ブランチに移動します。
- 新しいブランチの作成 (Test0);
- 新しく作成されたブランチに移動します。
- ファイルの追加 (BranchTest);
- 変更のコミット;
- 「マスター」ブランチに戻ります。
図 1 - Ubuntu 18.04 でのブランチとコミットの作成例
Git ブランチの検索と削除
"git branch" コマンドを実行すると、既存のすべてのブランチのリストが単純に解放されます。
$ git branch
ブランチを削除するには、「git branch」コマンドを使用します。この場合、「-d」引数と削除するブランチの名前が続きます。
$ git branch -d <nome_ramo>
図 2 は、ブランチのリストと、新しく作成されたブランチ (Test0) の削除の例を示しています。
図 2 - Ubuntu 18.04 でのブランチと削除のリストの例
図に示すように、変更が加えられたブランチを削除しようとすると、Git はエラーを返します。ブランチは結合 (ブランチ マージ) されていないため、誤って行われたすべての作業が失われないように、その削除を回避します。
「-D」引数を使用してブランチを削除することは引き続き可能です:
$ git branch -D <nome_ramo>
Git ブランチのマージ
ブランチの目的は、メイン プロジェクトに影響を与えずに新しい機能を試すために、並行して独立したワークフローを作成することです (たとえば、「リリース」、「ベータ」、または「修正」バージョン)。
このため、ブランチは短い寿命を持つように設計されており、別のブランチとの合併で最高潮に達します。
ブランチは、「git merge」コマンドの後にマージするブランチの名前を指定してマージできます。
$ git merge <ramo_da_unire>
明らかに、合併は 2 つのブランチ間で行われなければなりません。 「git merge」コマンドは、構文に示されているブランチを現在のブランチとマージします。そのため、「マージ」を実行するには、「git checkout」を通じて、マージ先のブランチにいることを確認してください。
したがって、示されている「git merge」コマンドは、マージの痕跡を残さない「リポジトリ」履歴。
多くの場合、引数「--no-ff」を使用するだけで十分なように、マージを追跡する必要がある場合があります。このようにして、Git は将来の「マージ」を識別するために新しいコミットを自動的に作成します。
$ git merge --no-ff <ramo_da_unire>
2 つのブランチのマージは、示されたブランチとマージされたブランチの削除を意味するものではありません。代わりに、存在し続けます。完全に削除するには、「git branch -d」コマンドを使用して削除を続行してください。
図 3 に、ブランチ間のマージの例を示します。特に、実行される操作は次のとおりです:
- 「マスター」ブランチに移動します。
- 支店のリスト;
- 「Br01」ブランチのマージ;
- 「Br01」ブランチのキャンセル
図 3 - Ubuntu 18.04 でマージされたブランチの例
現在のブランチとマージされていないブランチのみを示すリストを取得するには、「git branch」コマンドの後に「--no-merged」引数を使用します。
$ git branch --no-merged
競合の解決
2 つのブランチがマージされると、Git は 2 つの親コミットのうちどちらが最適であるかを自動的に判断し、マージします。
Git は、この操作中に保存するファイルのバージョンを自動的に決定できない場合があるため、
このような状況が発生した場合は、手動で競合を整理し、行った変更をコミットしてください。または、ブランチのマージは行われません。
次の例は、この発生を最もよく示しています。同じファイルの 2 つの異なるバージョンが保存されている 2 つの異なるブランチを考慮するため、マージされると、Git は次の警告を表示します:
CONFLICT (content): Merge conflict in <filename>
Automatic merge failed; fix conflicts and then commit the result.
問題を解決するには、競合するファイルがあるフォルダーに移動し、それを変更して、「コミット」で後続の「追加」を行います。テキスト ファイルの場合、Git は、最初のブランチと "<<<<<<<" と "=======" の間の "=" の間にのみ存在するセクションを挿入することにより、ファイル内の問題のあるセクションを報告します。 ======"および">>>>>>> "2 番目にのみ存在するもの。
ファイルを手動で変更し、"git add" コマンドに続いて " git commit" コマンドを実行すると、図 4 に示すように、2 つのブランチが最終的にマージされます。
図 4 に示す例では、「マージ」が正しく実行されるように、結合されていないブランチも制御されています。
図 4 - Ubuntu 18.04 での競合とマージの解決の例
実際、コミット後、「Br03」ブランチは切断されたブランチのリストに表示されなくなり、「Br04」ブランチとのマージが成功したことが証明されました。
Git タグの管理
「タグ」は、バージョンや作業中のプロジェクトに関する有用な情報を報告するために、さまざまな「コミット」に付けるラベルにすぎません。
「リポジトリ」内のタグを表示するには、「git tag」コマンドを使用します:
$ git tag
Git には、「注釈付き」と「軽量」の 2 種類のタグがあります。最初のものは、「チェックサム」、開発者名、日付/時刻、コメントなどの完全なバージョン情報を示すために使用されます。 2 つ目はコミットへの単純なポインターです。
「git tag」コマンドの後にバージョン識別テキストを指定すると、「軽量」タグが作成されます。構文は以下のとおりです:
$ git tag <Nome_Versione>
代わりに、引数「-a」を使用すると、「注釈付き」タグのバージョンになります:
$ git tag -a <Nome_Versione> -m <Commento>
最後に、タグを表示するには、以下に示すように「git show」コマンドを使用します:
$ git show <Nome_Versione>
今調べたコマンドでは、最後のコミットにのみ「タグ」を追加できます。古いコミットにタグを追加するには、「git tag」コマンドの後に、参照するコミットの識別子 (チェックサム) も指定します。完全な構文を以下に示します:
$ git tag -a <Nome_Versione> <Checksum_Commit>
行われたさまざまなコミットの「チェックサム」を追跡するには、「git log」コマンドを使用します。
$ git log --pretty=oneline
コマンドが起動されると、コミットのさまざまな「チェックサム」の時系列のリストが端末に表示され、その後に変更の「コミット」フェーズで入力されたコメントが続きます。