Git-managing-branches
Git-ブランチの管理
分岐操作により、別の開発ラインを作成できます。 この操作を使用して、開発プロセスを2つの異なる方向に分岐できます。 たとえば、6.0バージョンの製品をリリースし、7.0の機能の開発を6.0のバグ修正とは別に維持できるようにブランチを作成する場合があります。
ブランチを作成
トムは、git branch <branch name>コマンドを使用して新しいブランチを作成します。 既存のブランチから新しいブランチを作成できます。 特定のコミットまたはタグを開始点として使用できます。 特定のコミットIDが提供されていない場合、開始点としてHEADを使用してブランチが作成されます。
新しいブランチが作成されます。 Tomはgit branchコマンドを使用して、利用可能なブランチを一覧表示しました。 Gitは、現在チェックアウトされているブランチの前にアスタリスクマークを表示します。
ブランチ作成操作の図解は以下に示されています-
ブランチを切り替える
Jerryはgit checkoutコマンドを使用してブランチを切り替えます。
ブランチを作成して切り替えるためのショートカット
上記の例では、2つのコマンドを使用してそれぞれブランチを作成および切り替えています。 Gitはcheckoutコマンドで –b オプションを提供します。この操作により、新しいブランチが作成され、すぐに新しいブランチに切り替わります。
ブランチを削除する
ブランチを削除するには、git branchコマンドで-Dオプションを指定します。 ただし、既存のブランチを削除する前に、他のブランチに切り替えてください。
Jerryは現在 test_branch にいるので、そのブランチを削除したいと考えています。 そこで、彼は以下に示すようにブランチを切り替えてブランチを削除します。
これで、Gitは2つのブランチのみを表示します。
ブランチの名前を変更する
Jerryは、文字列操作プロジェクトでワイド文字のサポートを追加することにしました。 彼はすでに新しいブランチを作成していますが、ブランチ名は適切ではありません。 そのため、 – m オプションの後に* oldブランチ名*と* newブランチ名*を使用してブランチ名を変更します。
これで、git branchコマンドは新しいブランチ名を表示します。
2つのブランチをマージする
Jerryは、ワイド文字列の文字列長を返す関数を実装しています。 新しいコードは次のように表示されます-
上記のコマンドは、次の結果を生成します-
テスト後、彼は変更をコミットして新しいブランチにプッシュします。
Jerryはこれらの変更を新しいブランチにプッシュしているため、 master ブランチの代わりにブランチ名 wchar_support を使用したことに注意してください。
上記のコマンドは、次の結果を生成します。
変更をコミットした後、新しいブランチは次のように表示されます-
トムは、ジェリーがプライベートブランチで何をしているのか興味があり、 wchar_support ブランチのログをチェックします。
上記のコマンドは、次の結果を生成します。
コミットメッセージを表示することにより、トムはジェリーがワイドキャラクター用のstrlen関数を実装し、マスターブランチで同じ機能が必要であることを認識しています。 再実装する代わりに、彼はブランチをマスターブランチにマージして、ジェリーのコードを取ることにしました。
マージ操作の後、マスターブランチは次のように表示されます-
これで、ブランチ wchar_support がmasterブランチにマージされました。 コミットメッセージを表示するか、string_operation.cファイルに加えられた変更を表示することで確認できます。
上記のコマンドは、次の結果を生成します。
テスト後、彼はコードの変更をmasterブランチにプッシュします。
ブランチのリベース
Git rebaseコマンドはブランチマージコマンドですが、違いはコミットの順序を変更することです。
Git mergeコマンドは、他のブランチからのコミットを現在のローカルブランチのHEADの上に配置しようとします。 たとえば、ローカルブランチにコミットA→ B→ C→ Dがあり、マージブランチにコミットA→ B→ X→ Yがある場合、git mergeは現在のローカルブランチをA→のようなものに変換しますB→ C→ D→ X→ Y
Git rebaseコマンドは、現在のローカルブランチとマージブランチ間の共通の祖先を見つけようとします。 次に、現在のローカルブランチのコミットの順序を変更して、コミットをローカルブランチにプッシュします。 たとえば、ローカルブランチにコミットA→ B→ C→ Dがあり、マージブランチにコミットA→ B→ X→ Yがある場合、Gitリベースは現在のローカルブランチをA-のようなものに変換します> B→ X→ Y→ C→ D。
複数の開発者が単一のリモートリポジトリで作業する場合、リモートリポジトリ内のコミットの順序を変更することはできません。 この状況では、リベース操作を使用して、ローカルコミットをリモートリポジトリコミットの上に配置し、これらの変更をプッシュできます。