概要
Gitでソースコードのバージョンを管理する時、main
ブランチを最終バージョンのソースコード(本番にデプロイしたソースコード)を管理します。そして、main
ブランチではないブランチを生成して新しい機能を開発した後、開発が完了されたら、main
ブランチにマージ(Merge)をします。
今回のブログポストではgit branch
とgit merge
を使ってブランチを生成してマージをする方法について説明して、git log
とgit diff
を使ってブランチ間違さを確認する方法について説明します。
ブランチ確認
次のコマンドを使って現在ローカル(Wroking directory)に存在するブランチを確認します。
git branch
git branch
コマンドを実行すると下記のようにローカルに存在するブランチリストが表示されます。そして、現在選択されたブランチ(checkoutされたブランチ)の前に*
マークが表示されます。
* main
(END)
ブランチ生成
次のコマンドを使うと新しいブランチを生成することができます。
git branch BRANCH_NAME
このように新しく生成されたブランチを選択するためには次のようにgit checkout
を使う必要があります。
git checkout BRANCH_NAME
次のコマンドを使うと、新しいブランチを生成して、同時にそのブランチを選択することができます。
git checkout -b BRANCH_NAME
ブランチの履歴や違さの確認
Gitでは新しいブランチを作って、修正した後、ブランチの履歴を確認したり、ブランチの間で違さを比較することができます。
git log
次のコマンドを使うと、現在ブランチの修正事項を確認することができます。
git log
次のように現在ブランチの修正内容が表示されます。
commit 18be2fdd7c312cb834610baff4b9388b9d719dce (HEAD -> develop)
Author: dev-yakuza <[email protected]>
Date: Sat Jul 17 19:53:13 2021 +0900
Modify example file
commit da360f74c8227716fa6f005808480bef8811c6b8
Author: dev-yakuza <[email protected]>
Date: Sat Jul 17 19:52:07 2021 +0900
Add a file
ここで--branches
オプションを使うと、ローカルに存在されたす全てのブラインチの履歴を確認することができます。
git log --branches
次のように全てのブランチの修正内容が表示されます。
commit 8c591d99fd58229d6b600a2e9560b21b8e2181be (main)
Author: dev-yakuza <[email protected]>
Date: Sat Jul 17 19:55:42 2021 +0900
Add a new file
commit 18be2fdd7c312cb834610baff4b9388b9d719dce (HEAD -> develop)
Author: dev-yakuza <[email protected]>
Date: Sat Jul 17 19:53:13 2021 +0900
Modify example file
commit da360f74c8227716fa6f005808480bef8811c6b8
Author: dev-yakuza <[email protected]>
Date: Sat Jul 17 19:52:07 2021 +0900
Add a file
次のように--graph
オプションを使うと、もっと分かりやすく表示されます。
git log --branches --graph
次のようにグラフで表示されます。
* commit 8c591d99fd58229d6b600a2e9560b21b8e2181be (main)
| Author: dev-yakuza <[email protected]>
| Date: Sat Jul 17 19:55:42 2021 +0900
|
| Add a new file
|
| * commit 18be2fdd7c312cb834610baff4b9388b9d719dce (HEAD -> develop)
|/ Author: dev-yakuza <[email protected]>
| Date: Sat Jul 17 19:53:13 2021 +0900
|
| Modify example file
|
* commit da360f74c8227716fa6f005808480bef8811c6b8
Author: dev-yakuza <[email protected]>
Date: Sat Jul 17 19:52:07 2021 +0900
Add a file
最後に--oneline
オプションを使うと、簡単にブランチとメッセージだけ確認することができます。
git log --branches --graph --oneline
次のように簡単にブランチとメッセージが表示されます。
* 8c591d9 (main) Add a new file
| * 18be2fd (HEAD -> develop) Modify example file
|/
* da360f7 Add a file
git logでブラインチ比較
次のコマンドを実行すると、現在ブランチとmain
ブランチのコミットの違さを確認することができます。
git log main..BRANCH_NAME
次のようにmain
と特定したブラインチの間の違さが表示されます。
commit 8c591d99fd58229d6b600a2e9560b21b8e2181be (main)
Author: dev-yakuza <[email protected]>
Date: Sat Jul 17 19:55:42 2021 +0900
Add a new file
commit 18be2fdd7c312cb834610baff4b9388b9d719dce (HEAD -> develop)
Author: dev-yakuza <[email protected]>
Date: Sat Jul 17 19:53:13 2021 +0900
Modify example file
次のように-p
オプションを使うと、修正した内容も表示することができます。
git log -p main..BRANCH_NAME
次のように修正した内容を確認することができます。
commit 18be2fdd7c312cb834610baff4b9388b9d719dce (HEAD -> develop)
Author: dev-yakuza <[email protected]>
Date: Sat Jul 17 19:53:13 2021 +0900
Modify example file
diff --git a/example.txt b/example.txt
index d00491f..1191247 100644
--- a/example.txt
+++ b/example.txt
@@ -1 +1,2 @@
1
+2
git diffでブランチ比較
git diff
のコマンドを使ってもっと簡単に二つのブランチの違さを確認することができます。
git diff main..BRANCH_NAME
次のようにファイル名と修正内容を確認することができます。
diff --git a/example b/example
deleted file mode 100644
index d00491f..0000000
--- a/example
+++ /dev/null
@@ -1 +0,0 @@
-1
diff --git a/example.txt b/example.txt
index d00491f..1191247 100644
--- a/example.txt
+++ b/example.txt
@@ -1 +1,2 @@
1
+2
diff --git a/example2.txt b/example2.txt
deleted file mode 100644
index e69de29..0000000
git merge
新しいブランチを作って、新しい機能を開発して完成したら、当該機能をmain
ブランチ(本番用のブランチ)にマージ(Merge)して新しい機能をユーザに提供しなければならないです。
そしたら、開発した新しい機能が含まれたBRANCH_NAME
をmain
ブランチにマージする方法について説明します。BRANCH_NAME
をmain
ブランチにマージするためにはまず、main
ブランチに移動する必要があります。
git checkout main
その後、git merge
コマンドを使ってmain
ブランチにマージしようと思ってるブランチをマージします。
git merge BRANCH_NAME
ブランチが無事にマージされたら次のようなメッセージが確認されます。
Merge made by the 'recursive' strategy.
example.txt | 1 +
1 file changed, 1 insertion(+)
最後に、次のコマンドを実行してマージされたブランチを削除します。
git branch -d BRANCH_NAME
ここで使った-d
オプションはマージされたブランチを消すとき使います。もし、マージされなかったブランチを消す時は-D
オプションを使います。
git branch -D BRANCH_NAME
コンフリクト(Conflict)
git merge
コマンドを使ってブランチをマージする時、同じファイルを修正した場合、下記のようにコンフリクト(Conflict)
でマージに失敗することが確認できます。
Auto-merging example2.txt
CONFLICT (content): Merge conflict in example2.txt
Automatic merge failed; fix conflicts and then commit the result.
git status
コマンドを実行して現在の状態を確認すると次のようにマージされなかったファイルを確認することができます。
On branch main
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: example2.txt
no changes added to commit (use "git add" and/or "git commit -a")
当該ファイルを開いて見ると、次のように2つのブランチがコンフリクトされた内容が<<<<<<< HEAD
と=======
、そして>>>>>>> develop
で別れて表示され照ることが確認できます。
# vi example2.txt
<<<<<<< HEAD
main
=======
develop
>>>>>>> develop
HEAD
は現在のブランチ、つまりgit merge
のコマンドを実行してブランチ(main
)です。>>>>>>> develop
はgit merge
コマンドの対象になるブランチ(git merge BRANCH_NAME
のBRANCH_NAME
)です。
私たちは2つの内容を確認して、必要な部分だけ残す修正をする必要があります。ここではHEAD
の内容だけ残す修正をしました。
main
このように修正をした後、次のコマンドを実行して、コンフリクトされた内容をコミットします。
git commit
次のように自動で生成されたコミットメッセージの内容が確認できます。
Merge branch 'develop' into main
# Conflicts:
# example2.txt
#
# It looks like you may be committing a merge.
# If this is not correct, please remove the file
# .git/MERGE_HEAD
# and try again.
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch main
# All conflicts fixed but you are still merging.
この後、:wq
を入力してコミットメッセージを保存すると、うまくマージされたことが確認できます。
完了
これでGitで新しいブランチを生成して、新しいブランチで修正した内容をマージする方法についてみてみました。皆さんも今から色んなブランチの戦略を使って、ソースコードのバージョン管理をしてみてください。
私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!
アプリ広報
Deku
が開発したアプリを使ってみてください。Deku
が開発したアプリはFlutterで開発されています。興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。