[Git] 動作を試す 実行例34：mergeコマンドを用いて更に複数回マージしてみる

Gitの動作を理解するために、Gitのコマンドを実際に試して、結果を見てみました。

1つの記事内で一連のGitコマンドが完結しているので、これら一連のコマンドを順に実行させて結果を見ることで、一連のGitの動作を実際に体感でき、一通り独習することが可能です。

※前回記事のリポジトリ状態からの続きになっています。
| [前回記事へ](https://qiita.com/dl_from_scratch/items/5f3dba80422dce432efc) | [目次へ：Git関連記事のまとめページ](https://qiita.com/dl_from_scratch/items/597bc28a4787a7901d21) | [次回記事へ](https://qiita.com/dl_from_scratch/items/a579d8ae7edf01b4d047) |
|:-:|:-:|:-:|

# 実行例

```
(※始めにコミット履歴状況を確認)
git log --oneline --graph --all
↓
結果: 
* f3ef64d (HEAD -> branch2) message12
* 7fdeb04 message10
* b838160 message9
* c68ef01 message8
| *   135f847 (branch1) Merge branch 'master' into branch1
| |\
| | * 60b0341 (master) message12
| | * 045a734 message11
| | * d10f934 message10
| |/
|/|
| * 2495cae message7
|/
* 94996a0 message4
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1

-----

※更にマージしてみる: master ← branch2
git checkout master
git merge branch2
↓
結果: 
Auto-merging test1.txt
CONFLICT (content): Merge conflict in test1.txt
Auto-merging test10.txt
CONFLICT (add/add): Merge conflict in test10.txt
Automatic merge failed; fix conflicts and then commit the result.

git status -s
↓
結果: 
UU test1.txt
AA test10.txt

git diff -U3
↓
結果: 
diff --cc test1.txt
index 2b06b09,8a7ca86..0000000
--- a/test1.txt
+++ b/test1.txt
@@@ -2,5 -2,6 +2,11 @@@ Sample-Added-1
  Sample-Added-12
  Sample-Added-13
  Sample-Added-14
++<<<<<<< HEAD
 +Sample-Added-110
 +Sample-Added-111
++=======
+ Sample-Added-18
+ Sample-Added-19
+ Sample-Added-110
++>>>>>>> branch2
diff --cc test10.txt
index 002832f,0b7d9ed..0000000
--- a/test10.txt
+++ b/test10.txt
@@@ -1,3 -1,2 +1,6 @@@
  Sample-Added-1010
++<<<<<<< HEAD
 +Sample-Added-1011
++=======
++>>>>>>> branch2
  Sample-Added-1012

(※コンフリクトを手動で解消)
echo Sample-Added-11 > test1.txt
echo Sample-Added-12 >> test1.txt
echo Sample-Added-13 >> test1.txt
echo Sample-Added-14 >> test1.txt
echo Sample-Added-18 >> test1.txt
echo Sample-Added-19 >> test1.txt
echo Sample-Added-110 >> test1.txt
echo Sample-Added-111 >> test1.txt
type test1.txt
↓
結果: 
Sample-Added-11
Sample-Added-12
Sample-Added-13
Sample-Added-14
Sample-Added-18
Sample-Added-19
Sample-Added-110
Sample-Added-111

(※test10.txtのコンフリクトを解消せずに進めてみる)

git add .
git status -s
↓
結果: 
M  test1.txt
M  test10.txt

※マージ処置をコミット
git commit --no-edit
↓
結果: 
[master 4791df6] Merge branch 'branch2'

※test10.txtのコンフリクトを解消せずに進めると、コンフリクト追記状態のままコミットされる
type test10.txt
↓
結果: 
Sample-Added-1010
<<<<<<< HEAD
Sample-Added-1011
=======
>>>>>>> branch2
Sample-Added-1012

git log --oneline --graph --all
↓
結果: 
*   4791df6 (HEAD -> master) Merge branch 'branch2'
|\
| * f3ef64d (branch2) message12
| * 7fdeb04 message10
| * b838160 message9
| * c68ef01 message8
| | *   135f847 (branch1) Merge branch 'master' into branch1
| | |\
| |_|/
|/| |
* | | 60b0341 message12
* | | 045a734 message11
* | | d10f934 message10
|/ /
| * 2495cae message7
|/
* 94996a0 message4
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1

-----

(※test10.txtのコンフリクトを解消して修正をコミット)
echo Sample-Added-1010 > test10.txt
echo Sample-Added-1011 >> test10.txt
echo Sample-Added-1012 >> test10.txt
type test10.txt
↓
結果: 
Sample-Added-1010
Sample-Added-1011
Sample-Added-1012

git add .
git commit -m "message13 (fixed test10.txt)"
↓
結果: 
[master a4d1247] message13 (fixed test10.txt)
 1 file changed, 3 deletions(-)

git log --oneline --graph --all
↓
結果: 
* a4d1247 (HEAD -> master) message13 (fixed test10.txt)
*   4791df6 Merge branch 'branch2'
|\
| * f3ef64d (branch2) message12
| * 7fdeb04 message10
| * b838160 message9
| * c68ef01 message8
| | *   135f847 (branch1) Merge branch 'master' into branch1
| | |\
| |_|/
|/| |
* | | 60b0341 message12
* | | 045a734 message11
* | | d10f934 message10
|/ /
| * 2495cae message7
|/
* 94996a0 message4
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1

-----

※更にマージしてみる: branch1 ← master
git checkout branch1
git merge master
↓
結果: 
Auto-merging test1.txt
CONFLICT (content): Merge conflict in test1.txt
Automatic merge failed; fix conflicts and then commit the result.

git status -s
↓
結果: 
UU test1.txt

git diff -U3
↓
結果: 
diff --cc test1.txt
index 5b43773,1c2a726..0000000
--- a/test1.txt
+++ b/test1.txt
@@@ -2,4 -2,7 +2,11 @@@ Sample-Added-1
  Sample-Added-12
  Sample-Added-13
  Sample-Added-14
++<<<<<<< HEAD
 +Sample-Added-17+110+111
++=======
+ Sample-Added-18
+ Sample-Added-19
+ Sample-Added-110
+ Sample-Added-111
++>>>>>>> master

(※コンフリクトを手動で解消)
echo Sample-Added-11 > test1.txt
echo Sample-Added-12 >> test1.txt
echo Sample-Added-13 >> test1.txt
echo Sample-Added-14 >> test1.txt
echo Sample-Added-17 >> test1.txt
echo Sample-Added-18 >> test1.txt
echo Sample-Added-19 >> test1.txt
echo Sample-Added-110 >> test1.txt
echo Sample-Added-111 >> test1.txt
type test1.txt
↓
結果: 
Sample-Added-11
Sample-Added-12
Sample-Added-13
Sample-Added-14
Sample-Added-17
Sample-Added-18
Sample-Added-19
Sample-Added-110
Sample-Added-111

git add .
git status -s
↓
結果: 
M  test1.txt

※マージ処置をコミット
git commit --no-edit
↓
結果: 
[branch1 2b19eaa] Merge branch 'master' into branch1

git log --oneline --graph --all
↓
結果: 
*   2b19eaa (HEAD -> branch1) Merge branch 'master' into branch1
|\
| * a4d1247 (master) message13 (fixed test10.txt)
| *   4791df6 Merge branch 'branch2'
| |\
| | * f3ef64d (branch2) message12
| | * 7fdeb04 message10
| | * b838160 message9
| | * c68ef01 message8
* | | 135f847 Merge branch 'master' into branch1
|\| |
| * | 60b0341 message12
| * | 045a734 message11
| * | d10f934 message10
| |/
* / 2495cae message7
|/
* 94996a0 message4
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1

※現在のブランチ構造の模式図(+Mはマージ、10C,12Cはチェリーピック)
message1-2-3-4-10-11-12-+M-13 ←master
             |       ↓ ↑ ↓
             +-7-----+M-↑-+M ←branch1
             |          ↑
             +-8-9-10C--12C ←branch2

-----

※マージのコミットでは、--stat指定時でも、変更したファイル(コンフリクトの解消による変更)が表示されない模様
git log --oneline --graph --all --stat -5
*   2b19eaa (HEAD -> branch1) Merge branch 'master' into branch1
|\
| * a4d1247 (master) message13 (fixed test10.txt)
| |  test10.txt | 3 ---
| |  1 file changed, 3 deletions(-)
| *   4791df6 Merge branch 'branch2'
| |\
| | * f3ef64d (branch2) message12
| | |  test10.txt | 1 +
| | |  1 file changed, 1 insertion(+)
| | * 7fdeb04 message10
| | |  test1.txt  | 1 +
| | |  test10.txt | 1 +
| | |  2 files changed, 2 insertions(+)

-----

※masterとbranch2だけのログを表示
git log --oneline --graph master branch2
↓
結果: 
* a4d1247 (master) message13 (fixed test10.txt)
*   4791df6 Merge branch 'branch2'
|\
| * f3ef64d (branch2) message12
| * 7fdeb04 message10
| * b838160 message9
| * c68ef01 message8
* | 60b0341 message12
* | 045a734 message11
* | d10f934 message10
|/
* 94996a0 message4
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1
```

# 環境

Windows 10、PortableGit-2.40.0-64-bitを使用、全てローカルPC上で実施、GitHub等は不使用。