Gitのブランチ


weather-appの構築が途中で、5日間の予報機能を追加しようと考えています。完成させるまでに数回のコミットが必要かもしれず、完成するまでの間、半完成のコードを既に機能しているアプリケーションの隣に置きたくありません。ブランチはGitがこれを解決する方法です。実験が行われる別の作業行であり、mainは開始前と全く同じように機能し続けます。
ブランチとは何か
実際の動作を見てみましょう:
$ git branch forecast
$ git switch forecast
Switched to branch 'forecast'2つのコマンド: 最初のコマンドはforecastという新しいブランチを作成し、2番目のコマンドはそのブランチに移動します。ここからは、forecastで行うすべてのコミットがforecastに着地し、mainは元の場所にとどまります。
**ブランチ**は、コミットを指すラベルです。現在、mainとforecastは同じコミットを指しており、それはgit branch forecastを実行したときに立っていたコミットです。forecastにいる間に再度コミットすると、そのラベルは新しいコミットに進みます。mainは、あなたがそこに切り替えて自分でコミットするまで、元の場所にとどまります。
git branchで両方のラベルを見ることができます:
$ git branch
forecast
* mainアスタリスクは現在いるブランチを示しています。ブランチはコミットを指すただの名前です。これが全体的なメカニズムです。この章の他のすべてはこれらのラベルを周りで動かすことのバリエーションです。
git branch forecastは現在のコミットを指す新しいラベルを作成し、git switch forecastはあなたをそこに移動させます。実際にそこでコミットするまで、ファイルについては何も変わりません。ブランチを付箋としてコミットを考えることが好きです: 追加するのは安く、移動させるのは安く、完了したら剥がすのは安いです。 ブランチの作成と切り替え
git branch forecastは単独では、あなたをそこに移動させずにラベルを作成します。ほとんどの場合、あなたは両方を一度に望むので、git switchはショートカットを持っています:
$ git switch -c forecast
Switched to a new branch 'forecast'-cは「create」を意味します。git switch -cはブランチを両方作成して、あなたをそこに移動させます。その単一のコマンドは、新しい作業を始めるたびにほぼ常に手に取るものです。
ブランチを切り替えると、ファイルが表示するスナップショットが変わります。試してみてください: 下のecho行は、src/forecast.jsという新しいファイルを1行で作成する1ステップの方法です。他のすべては既に知っているコマンドです:
$ git switch forecast
$ echo "// 5日間予報ロジック" > src/forecast.js
$ git add src/forecast.js
$ git commit -m "Start forecast module"
$ ls src
forecast.js index.js
$ git switch main
Switched to branch 'main'
$ ls src
index.jsファイルは消えていません。それはforecastブランチに存在し、mainブランチのスナップショットはそれを含みませんでした。forecastに戻すと、それはあなたが残したちょうどその通りに再表示されます。
git switch -c forecastはブランチを作成し、1ステップであなたをそこに移動させます。それはほぼ毎回あなたが使うものです。ブランチを切り替えると、あなたが見るファイルのバージョンが交換されます。1つのブランチで追加されたファイルは、あなたが戻ってくるまで別のブランチで不在です。何も失われていません、それは他のブランチに駐車されています。 HEADとデタッチドHEAD
Gitは**HEAD**と呼ばれるマーカーを使用して現在地を追跡します。通常HEADは現在のブランチを指し、そのブランチはコミットを指すので、切り替えるたびにHEADは自動的に進みます。ブランチ名の代わりにハッシュによる特定のコミットまたはタグ(リリースを示すことが多い1つのコミットに固定された固定ラベル)をチェックアウトすると、HEADはブランチラベルではなくそのコミットに直接付着します。この状態をデタッチドHEADと呼ばれています。
あなたはそこで自由に見回ることができ、さらにコミットすることもできますが、何もそれらの新しいコミットを名前で指していません。最初にブランチを作成せずにブランチに切り替えると、それらは再度見つけるのが難しくなります。
$ git switch a1b2c3d
HEAD is now at a1b2c3d Add password strength meterそのメッセージ「HEAD is now at」は、Gitがあなたにブランチ領域を離れた、単一のコミットにHEADを付着させたことを伝えています。
ここから先
あなたはブランチを作成し、それらの間を移動し、mainが実験している間あなたが試している間、どのようにmainが手つかずのままであるかを見てきました。次の質問は、ブランチの作業がmainに戻る方法であり、これはまさにマージと競合がカバーしているものです。進む前にコミット履歴を読むための復習が必要な場合は、履歴がgit log、git show、およびgit diffを説明します。

