7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ブランチの概要

Last updated at Posted at 2023-09-27

ブランチの役割は、履歴の流れを分岐させることである。
分岐させたブランチは最終的に統合を行う。
その方法にはいくつかあり、それぞれの違いをこの記事でまとめた。

この記事では、
まず必要となる前提知識のブランチの種類について定義し、
そのあと本題である統合方法(コマンド)を概要図と共に説明する。

目次

ブランチの種類
ローカルブランチ
リモートブランチ
上流ブランチ
リモート追跡ブランチ
概要図
統合コマンド
git commit
git fetch
git merge
git pull
git push
stash領域

ブランチの種類

・ローカルブランチ

  ローカルリポジトリで管理されているブランチのこと。
  リポジトリを作成(git init)すると同時に作成されるデフォルトのブランチを
  masterという。

 masterは、2021年以降にmainという名前に変更されている。

・リモートブランチ

  リモートリポジトリで管理されているブランチのこと。

・上流ブランチ

  ローカルブランチが、履歴を追跡するリモートブランチのこと。

 追跡するとは、
 ブランチの内容(履歴)を同じ状態にすること。

 正体
  上流ブランチはローカルブランチ、リモート追跡ブランチ、リモートブランチの様に
  実際に各リポジトリに存在するブランチではなく、
  「このローカルブランチは指定したブランチを追跡します」と、
  ローカルブランチに紐付けされたブランチである。
  つまり上流ブランチの正体はリモート追跡ブランチであり、またそれの別称である。

 上流ブランチを紐づけ(設定する)理由
  git push/pull`コマンドを実行する際、
  ブランチ指定を省略しても上流ブランチだと判断されるのでコマンド入力が楽になる。

$ git push
$ git push origin main:main

  カレントブランチがmainで上流ブランチがorigin/mainの場合
  2つのコマンドは同じ処理を行う。

注意
カレントブランチに上流ブランチを設定していない状態で
git pushコマンドにブランチ指定せずに実行するとエラーになる。

 

・リモート追跡ブランチ

  リモートブランチを追跡するブランチのこと。
  ローカルリポジトリに存在する。

  リモート追跡ブランチ名が仮にorigin/mainだとすると、
  origin(リモートリポジトリ)のmainブランチを追跡している。

 リモート追跡ブランチの存在意義
直前にpullしたリモートリポジトリの状態が保持されているため、
ネットワークを介さずローカル環境で前回の内容が確認ができる。

概要図

branch_command.png

統合コマンド

・git commit

  インデックスの内容をローカルブランチに追加する。
  commit時にはコミットメッセージが入力必須であり、
  また、任意でタグ(目印)を付けることができる。

 コミットメッセージ
  コミット時に入力を求められるメッセージのこと。
  他者や自分が後から履歴を見直した際に見やすいように変更内容や変更理由を記述する。
 形式

行数 内容
1 変更内容の要約
2 空白
3 変更した理由

 タグ
  コミットに名前を付けるもので、軽量タグと注釈付きタグがある。
  軽量タグは、名前を付けるだけ。
  注釈付きタグは、名前に加えてコメントや署名などを付けることができる。

 コミット対象ファイルから除外する
  .gitignoreファイルを作成し、そこにコミットしたくないファイル名を記述すると、
  トラッキングの対象外にできる。

・git fetch

  リモートブランチの内容をリモート追跡ブランチにコピーする。

 FETCH_HEADという名前でコピーしたブランチにチェックアウトできる。

 役割
  git pullではなく一旦git fetchすることで、
  リモートブランチの作業内容を把握したり、
  ローカルブランチと比較しコンフリクト発生の有無を確認できる。

コマンド例:

// リポジトリを省略するとリモート追跡ブランチが追跡している、
// リポジトリを指定したことになる
$git fetch

// ブランチ名を省略するとoriginの全てのブランチをコピーする
// 概要図の場合masterとdevelopがコピーされる
$git fetch origin

 

・merge

  リモート追跡ブランチの内容をローカルブランチに統合させる。

コンフリクトが発生するとマージは失敗する。

コマンド例:

// カレントブランチと引数に指定したブランチをマージする
$git merge [ブランチ名]

 rebase
  コミット履歴の移動や修正、削除したりするコマンド。
  mergeのようにマージコミットを作成して各ブランチを統合するのではなく、
  ブランチの先頭に別のブランチを付け加える。
  ※付け加える際にmerge処理は行われている。

merge_vs_rebase.png

・pull

  fetchとmergeの処理をまとめて行う。

 挙動
  前回pullしてからローカルブランチに変更がない場合、
  fast-forwardマージが行われる。

fast-forwardとは、単純にブランチを付け加えるだけのマージ。

merge_fast-forward.png

  前回pullしてからローカルブランチに変更があった場合、
  コンフリクトが発生しけいなければマージコミットが作成される。

コンフリクトが発生するとマージは失敗するため、
修正し解決してからコミットを行う。

merge.png

コマンド例:

// リモートブランチoriginのmasterをローカルブランチのmasterに反映する
$ git pull origin master:master

// 引数なしの場合、上流ブランチを指定したことになる
// 上流ブランチを設定していない場合、pullは実行されない
$ git pull

・push

  ローカルブランチの内容をリモートブランチとリモート追跡ブランチ両方に反映させる。

pushする際はローカルブランチをfast-forwardマージできる状態にしておく必要がある。
もし、コンフリクトが発生するとマージは失敗する。

コマンド例:

// ローカルブランチのmasterの変更を、リモートブランチoriginのmasterに反映する
$ git push origin master:master

// 引数なしの場合、上流ブランチを指定したことになる
// 上流ブランチを設定していない場合、pushは実行されない
$ git push

stash領域

  ワークツリーやインデックス内のコミットされていないものを、
  一時的に記憶しておく領域。

 役割
  チェックアウトの際に未コミットの内容をstashに退避させることができる。

チェックアウトの挙動
ワークツリーで作業中に別ブランチにチェックアウトすると、
コミットしていないインデックスやワークツリーの内容は、
移動先のブランチに移ってしまい、そこで自動マージされる。
※コンフリクトが発生したらエラーが発生しチェックアウトが失敗する。

stash.png
7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?