0
0

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.

Git ブランチとマージ

Posted at

ブランチの目的

作業を分岐することで、並行して複数の機能を開発するためにあるのがブランチ。

ブランチの仕組み

ブランチとは、コミットを指し示すポインタのこと。コミットすると、指し示しているコミットが、最新のコミットに移動する。

HEADとは

HEADとは今自分が作業しているブランチを指し示している。

ブランチを新規作成する

$ git branch <ブランチ名>

このコマンドは、ブランチを作成するだけで、ブランチの切り替えは行わない。

ブランチの一覧を表示する

$ git branch

# リモートリポジトリにあるブランチも表示する
$ git branch -a

*(アスタリスク)のついているブランチが、現在自分がいるブランチである。

ブランチを切り替える

$ git checkout <ブランチ名>

# featureブランチを作って切り替えることを考える
$ git branch feature
$ git checkout feature
# これは以下のコマンドと同じ
$ git checkout -b feature

ブランチを実践してみよう

branch_testディレクトリを作り、最初のコミットをする。

$ mkdir branch_test
$ cd branch_test
$ git init
Initialized empty Git repository in /home/username/branch_test/.git/
$ echo init > init.html
$ git add .
$ git commit -m 'create init.html'
[master (root-commit) c3d069a] create init.html
 1 file changed, 1 insertion(+)
 create mode 100644 init.html
$ git log --oneline
c3d069a (HEAD -> master, feature) create init.html


featureブランチを切る。

$ git branch feature
$ git branch
  feature
* master

今、masterfeatureが存在し、masterにいることが確認できた。

次にmasterブランチでファイルを作成しコミットする。

$ echo master > master.html
$ git add .
$ git commit -m 'create master.html'


GitHubで適当にリポジトリを作り、この変更をプッシュしておこう。

$ git remote add origin <URL>
$ git push origin master


次に、featureブランチに切り替えて新規ファイルを作成し、同様にコミット、プッシュしよう。

$ git checkout feature
Switched to branch 'feature'
$ echo feature > feature.html
$ git add .
$ git commit -m 'create feature.html'
[feature e980fc5] create feature.html
 1 file changed, 1 insertion(+)
 create mode 100644 feature.html
$ git push origin feature


最後にブラウザでGitHubを開き、ブランチを切り替えてみよう。存在するファイルがmasterfeatureで異なることが確認出来たら成功。

マージとは

他の人の変更内容を取り込む作業のこと。具体的には、2つのブランチを1つのブランチに統合すること。

マージの種類

Fast Foward
ブランチが枝分かれしていなかったときは、片方のブランチがもう片方のブランチを指すようになる。新たなコミットは作成されない。
Auto Merge
ブランチが枝分かれしていた場合、マージコミットという新しいコミットが作られる。マージコミットは親コミットを2つ持つ。
Conflict
同じファイルの同じ行に対して異なる編集を行ったときなどに生じる、どちらのブランチを優先すればよいのか解決できない状態。

マージする

$ git merge <ブランチ名>
$ git merge <リモート名/ブランチ名>

ブランチを実践してみようの続きから始めよう。

# masterブランチに切り替える
$ git checkout master
# マージする
$ git merge feature
# ファイル一覧を見てみる
$ ls
feature.html  init.html  master.html

master.htmlfeature.htmlが同時に存在することが確認できた。

コンフリクトの解消

コンフリクトが起こった場合、git statusコマンドで当該ファイルを調べることができる。ファイルを開くと、以下のような記述がある。

<<<<<<< HEAD
~
=============
~
>>>>>>> NEW

HEADは現在いるブランチを示す。また、NEWには取り込もうとしているブランチの名前が入る。

上の記述を消し、正しい内容に修正した後、新たにコミットすることでコンフリクトを解消できる。

コンフリクトの防止策

  • 複数人で同じファイルを変更しない
  • pullやmergeをする前に、commitやstashをしておく
  • プルするときは、現在いるブランチを確認する

ブランチを変更・削除する

今いるブランチの名前を変更する場合、

$ git branch -m <新ブランチ名>


ブランチを削除する場合

$ git branch -d <ブランチ名>

# 未マージのブランチを強制削除する場合
$ git branch -D <ブランチ名>

ブランチの実用的な使い方

masterブランチをリリース用にとっておき、開発はいくつかのトピックブランチを作成して進める。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?