Git Branch
Git ブランチの操作
Gitでは、branch
はメインリポジトリの新しい/別のバージョンです。
大規模なプロジェクトがあり、そのプロジェクトのデザインを更新する必要があるとします。
Gitを使用しない場合と使用する場合では、どのように動作するでしょうか。
Gitを使用しない場合:
- ライブバージョンへの影響を避けるために、関連するすべてのファイルのコピーを作成します。
- デザインの作業を開始すると、コードが他のコードに依存していることがわかり、これも変更する必要があります。
- 依存するファイルのコピーも作成します。すべてのファイルの依存関係は正しいファイル名を参照していることを確認します。
- 緊急事態です!プロジェクトの別の場所に無関係なエラーがあり、 できるだけ早く修正する必要があります!
- すべてのファイルを保存し、作業していたコピーの名前をメモします。
- 無関係なエラーに対処し、コードを更新して修正します
- 設計に戻り、そこで作業を終了します
- コードをコピーするか、ファイルの名前を変更すると、更新されたデザインがライブバージョンに反映されるようにします。
- (2週間後、修正前にファイルをコピーしたため、無関係のエラーが新しいデザインバージョンで修正されていないことに気づく)
Gitを使用する場合:
- new-designという新しいブランチで、メインブランチに影響を与えずにコードを直接編集します。
- 緊急事態です!プロジェクトの別の場所に無関係なエラーがあり、 できるだけ早く修正する必要があります!
- メインプロジェクトからsmall-error-fixという新しいブランチを作成します。
- 無関係なエラーを修正し、small-error-fixブランチをメインブランチにマージします。
- new-designブランチに戻り、そこで作業を終了します。
- new-designブランチをmainにマージする(見逃していた小さなエラーの修正について警告を受ける)
ブランチを使用すると、メインブランチに影響を与えることなく、プロジェクトのさまざまな部分で作業できます。
作業が完了したら、ブランチをメインプロジェクトにマージできます。
ブランチ間を切り替えて、互いに干渉することなく異なるプロジェクトで作業することもできます。
Gitでのブランチは非常に軽量で高速です。
新しい Gitブランチ
index.html
に新しい機能を追加してみましょう。
ローカルリポジトリで作業しているため、メインプロジェクトを主要なプロジェクトを変更することなく、安全に独自の変更や改善を行いたいです。
そこで、新しいbranch
を作成します:
例
git branch hello-world-images
hello-world-images
という新しいブランチを作成しました。
新しいbranch
が作成されたことを確認しましょう:
例
git branch
hello-world-images
master
master
の横にある*
は現在そのbranch
上に居ることを示します。
checkout
はブランチ
をチェックアウトするために使用されるコマンドです。現在のブランチ
からコマンドの最後に指定されたブランチに移動します。:
例
git checkout hello-world-images
Switched to branch 'hello-world-images'
ブランチ
に移動しました。
お気に入りのエディタを開いて、いくつかの変更を加えます。
この例では、画像 (img_hello_world.jpg)を作業フォルダーに追加し、コードを1行index.html
ファイルに追加しました。:
例
mainブランチ
と同じディレクトリ)に新しいファイルを追加しました。
次に現在のブランチ
のステータスを確認します。:
例
git status
On branch hello-world-images
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git restore ..." to discard changes in working directory)
modified: index.html
Untracked files:
(use "git add ..." to include in what will be committed)
img_hello_world.jpg
no changes added to commit (use "git add" and/or "git commit -a")
- index.htmlに変更がありますが、ファイルは
commit
用にステージングされていません。 img_hello_world.jpg
は追跡
されません。
したがって、両方のファイルをこのブランチ
のステージング環境に追加する必要があります。:
例
git add --all
--all
を使用すると、変更されたすべてのファイル(新規、変更、および削除)がステージングされます。
ブランチ
のステータス
をチェックして下さい。:
例
git status
On branch hello-world-images
Changes to be committed:
(use "git restore --staged ..." to unstage)
new file: img_hello_world.jpg
modified: index.html
ブランチ
にコミットします。:
例
git commit -m "Added image to Hello World"
[hello-world-images 0312c55] Added image to Hello World
2 files changed, 1 insertion(+)
create mode 100644 img_hello_world.jpg
ブランチ
とは異なる新しいブランチ
ができました。。
チェックアウト
時に -b
オプションを使用すると、新しいブランチが作成され、ブランチが存在しない場合はそこに移動します。
ブランチ間の切り替え
ここで、さまざまなブランチを操作することがいかに速くて簡単であるか、そしてそれがどれほどうまく機能するかを見てみましょう。
私たちはhello-world-images
ブランチにいます。このブランチにイメージを追加したので、現在のディレクトリ内のファイルをリストしてみましょう。
例
ls
README.md bluestyle.css img_hello_world.jpg index.html
img_hello_world.jpg
を見ることができ、htmlファイルを開くと、コードが変更されているのがわかる。全てはあるべき姿である。
さて、ブランチをmaster
に変更すると何が起こるか見てみましょう。
例
git checkout master
Switched to branch 'master'
例
ls
README.md bluestyle.css index.html
img_hello_world.jpg
はもう存在しません。 HTML ファイルを開くと、コードが変更前の状態に戻っていることがわかります。
ブランチの操作がいかに簡単かわかりますか?そして、これによってどのようにさまざまな作業が可能になるのでしょうか?
緊急ブランチ
ここで、hello-world-image の作成がまだ完了していませんが、マスター上のエラーを修正する必要があると想像してください。
masterを直接いじりたくないし、hello-world-imageもまだ終わっていないのでいじりたくありません。
そこで、緊急事態に対処するための新しいブランチを作成します。
例
git checkout -b emergency-fix
Switched to a new branch 'emergency-fix'
想像上のエラーを修正してみましょう。
例
ステータスを確認します。
例
git status
On branch emergency-fix
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git restore ..." to discard changes in working directory)
modified: index.html
no changes added to commit (use "git add" and/or "git commit -a")
例
git add index.html
git commit -m "updated index.html with emergency fix"
[emergency-fix dfa79db] updated index.html with emergency fix
1 file changed, 1 insertion(+), 1 deletion(-)
プログラミング学習を加速させる
プログラミングをプロの講師に教えてもらいませんか。