TECH I.S.

Git Branch


プラットフォームを変更します:

Shift focus to GitHubGitHubShift focus to BitbucketBitbucketShift focus to GitLabGitLab

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
「hello-world-images」という名前の新しいブランチが表示されますが、masterの横にある*は現在そのbranch上に居ることを示します。 checkoutブランチをチェックアウトするために使用されるコマンドです。現在のブランチからコマンドの最後に指定されたブランチに移動します。:

git checkout hello-world-images
Switched to branch 'hello-world-images'
現在のワークスペースをmasterブランチから新しいブランチに移動しました。

お気に入りのエディタを開いて、いくつかの変更を加えます。

この例では、画像 (img_hello_world.jpg)を作業フォルダーに追加し、コードを1行index.htmlファイルに追加しました。:

<!DOCTYPE html> <html> <head> <title>Hello World!</title> <link rel="stylesheet" href="bluestyle.css"> </head> <body> <h1>Hello world!</h1> <div><img src="img_hello_world.jpg" alt="Hello World from Space" style="width:100%;max-width:960px"></div> <p>これは、新しいGitリポジトリの最初のファイルです。</p> <p>ファイルに新しい行が追加されました!</p> </body> </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
これで、masterブランチとは異なる新しいブランチができました。。
注:チェックアウト時に -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'
これで、masterから新しいブランチを作成し、それに変更を加えました。他のブランチに影響を与えることなく、安全にエラーを修正できます。

想像上のエラーを修正してみましょう。

<!DOCTYPE html> <html> <head> <title>Hello World!</title> <link rel="stylesheet" href="bluestyle.css"> </head> <body> <h1>Hello world!</h1> <p>This is the first file in my new Git Repo.</p> <p>This line is here to show how merging works.</p> </body> </html>
このファイルに変更を加えたので、それらの変更をmaster ブランチに取得する必要があります。

ステータスを確認します。

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(-)
これでマスターに対する修正の準備ができたので、2つのブランチをマージする必要があります。

プログラミング学習を加速させる

プログラミングをプロの講師に教えてもらいませんか。

テックアイエスのプログラミングスクールは初心者も大歓迎です。年齢制限もありません。転職・副業に強く、挫折させない手厚いサポートで稼ぐ力を身につけましょう!

スクールの詳細