Gitコマンド入門::clone(fetch,pull,push,--allow-unrelated-histories)「第四十八回」

3 min read読了の目安(約2900字

みなさんこんにちは! 前回の第四十七回目は、複数のGitHubリモートリポジトリーから、リモートブランチを、git fetch しましたね。git remote add では、originの他、新規にエイリアス、Rep0045という任意の名称も出てきましたけど、みなさんは、独自の環境で試せましたか?! 今日は実際に、その異なるリモートブランチをマージしてみますね!

前回の記事はこちらから!

https://zenn.dev/shiozumi/articles/bd8fe86841f9cd

git本家本元の情報はこちらから!

https://git-scm.com/book/ja/v2

同じ祖先を持たないブランチはマージできません!(笑)

とはとはいうものの、--allow-unrelated-histories のオプションスイッチを付けると、マージできます! Googleで翻訳すると、unrelated histories = 無関係な歴史ですけど!

$ git branch -avv
  main                   1bd77d3 [origin/main] 1st
* temp_1                 37607ba [origin/temp_1: ahead 2] merge
  temp_2                 1bd77d3 [origin/temp_1] 1st
  remotes/Rep0045/main   3abef4b 1st
  remotes/Rep0045/temp   3abef4b 1st <!-- ここを、temp_1 とマージ!
  remotes/Rep0045/temp_1 3abef4b 1st
  remotes/origin/main    1bd77d3 1st
  remotes/origin/temp_1  1bd77d3 1st

このような私の環境に置いて、git merge Rep0045/temp_1 --allow-unrelated-histories
を、実行してみると・・・コンフィクトが、README.md で起こるものの編集して、add,commit 可能です!

$ git merge Rep0045/temp_1  --allow-unrelated-histories
CONFLICT (add/add): Merge conflict in README.md
Auto-merging README.md
Automatic merge failed; fix conflicts and then commit the result.

$ cat README.md
<<<<<<< HEAD
0046 pull push --prune
=======
0045 pull push
>>>>>>> Rep0045/temp_1

README.md がコンフィクトになりますので、編集して、add,commit しましょう!

$ git status
On branch temp_1
Your branch is up to date with 'origin/temp_1'.

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 added:      README.md

no changes added to commit (use "git add" and/or "git commit -a")

$ git add README.md
$ git commit -m "merge"
[temp_1 37607ba] merge

これで、無事にマージ完了です!

git log --graph で確認!

$ git log --graph
*   commit 37607ba178bdffb427926313d0ce756064e81a1a (HEAD -> temp_1)
|\  Merge: 1bd77d3 3abef4b
| | Author: Makoto Shiozumi <shiozumi@esmile-hd.com>
| | Date:   Tue Mar 16 16:35:55 2021 +0900
| |
| |     merge
| |
| * commit 3abef4bdbbdb4455453d226965e7dd7b6cf771ef (Rep0045/temp_1, Rep0045/temp, Rep0045/main)
|   Author: Makoto Shiozumi <shiozumi@esmile-hd.com>
|   Date:   Tue Mar 16 07:37:11 2021 +0900
|
|       1st
|
* commit 1bd77d3b36ae3fe2160ad452045d2817d4067ea0 (origin/temp_1, origin/main, temp_2, main)
  Author: Makoto Shiozumi <shiozumi@esmile-hd.com>
  Date:   Tue Mar 16 10:22:45 2021 +0900

      1st
      
// 第四十五回のリモートtemp_1ブランチと、
// 第四十六回のリモートtemp_1ブランチのマージ完了!

実際のところ、どのぐらいの頻度でこのようなことが発生するのかは、経験不足の私には予測もつきませんけど、ワンポイントでマージしたり、先日学習した、cherry-pick などの一部分のコミットを取り込む時には、先祖が異なるブランチの取り込みも、ありえそうですね。

毎度の話になりますけど、、、基本、同じファイルを複数の人数で編集するような仕様にしなければ、基本的に、マージコンフィクトは、ほぼ、起こりませんからね~ となると、部分的なコミットの取り込みや、祖先の異なるブランチのマージは、いわば、特定の機能追加するときのように、複数のファイルを既存の開発フォルダーに追加コピーするような使い方が出来る筈です。

それでは、今回はここまで、お疲れ様でした!

https://zenn.dev/shiozumi/articles/0b216ef9e58c45
https://twitter.com/esmile2013