Gitコマンド入門::restore(merge,reset)「第十一回」

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

branch 分岐の次は、mergeマージで合体!

さあ~、今回は、いよいよマージですね! 自分専用にブランチを作成して、追加修正を行ったら、また、元の木に合流しないと、永遠に、mainには繁栄されませんからね~ というこで、gitのイメージ像として、<tree>=木に例えられていますが、実際は、再びファイルを合体するのが、一番のキモとなります。

そして元に戻すとき、自分だけの更新ならば、そんなに問題は起こりませんが、分岐元のmainに変更があったり、他のsubブランチがあったりすると、合体も複雑になって行き、容易ではなくなるので、どこまでも、難関だと思って置いて良いでしょう。(苦笑)

まあ~、ソフト開発に置いての基本中の基本ですが、なるべく同じファイルを複数人で編集しないようにするのが、コストを抑えることができる基本ですよ!

ちなみに前回の記事は、こちらです!

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

では、さっそく、subを、mainにマージ!

$ git checkout main
// main ブランチに移動してから、sub をマージする!
git branch
* main
  sub
$ git merge sub
Already up to date. // mainも、subも全く同じなので、当然の結果ですね。

急いで、一歩前に進むよりも、半歩先から、慌てずに試していきましょう!

まず最初に、README.md に一行追加して、subに、commit -m "3rd sub"

$ git checkout sub
Switched to branch 'sub'
// まずは、subを選択

$ echo "# sub add" >> README.md
$ cat README.md
# test
# (^^)
# sub add
// ファイルの最後に、"#sub add" の文字列を追加!

$ git add README.md
// Staging Area に追加!

$ git commit -m "3rd sub"
[sub 446c2db] 3rd sub
 1 file changed, 1 insertion(+)
// Repogitory に追加! 

$ git log
commit 446c2dbbf658e27c36cc84aa9de21ebc20ffbb59 (HEAD -> sub)
Date:   Fri Feb 12 12:31:57 2021 +0900
    3rd sub

commit b8c6432555dcffd05d0973179add7bbb19d39d5d (main)
Date:   Wed Feb 10 22:59:21 2021 +0900
    2nd commit

commit a467fbdd7e989b224f388e048823068a0f122d51 (origin/main)
Date:   Wed Feb 10 15:28:42 2021 +0900
    first commit

では、もう一度、先ほどのコマンド実行!

$ git checkout main

$ git merge sub
Updating b8c6432..53e8165
Fast-forward
 README.md | 1 +
 1 file changed, 1 insertion(+)

$ git log
commit 53e8165e76c5e7c1e2e0111fc9c811923459ef42 (HEAD -> main, sub)
Date:   Fri Feb 12 13:01:25 2021 +0900

    3rd sub

commit b8c6432555dcffd05d0973179add7bbb19d39d5d
Date:   Wed Feb 10 22:59:21 2021 +0900

    2nd commit

commit a467fbdd7e989b224f388e048823068a0f122d51 (origin/main)
Date:   Wed Feb 10 15:28:42 2021 +0900

    first commit

マージ完了! メデタシメデタシ!

ブランチmainに、変更履歴が追加されていない場合は、あっさりマージできますね!
それでは、もう1回練習で繰り返してやってみましょう! ということで、元の状態に戻すには、以下のコマンドを実行してください。

ブランチsubの削除:git branch --delete sub[1]
ブランチmainを元に戻すには、git reset --hard HEAD^[2]

$ git branch --delete sub
Deleted branch sub (was 6b76b3d).

$ git branch
* main
// これで、sub が削除されました。

$ git reset --hard HEAD^
HEAD is now at b8c6432 2nd commit

$ git log
commit b8c6432555dcffd05d0973179add7bbb19d39d5d (HEAD -> main)
Date:   Wed Feb 10 22:59:21 2021 +0900

    2nd commit

commit a467fbdd7e989b224f388e048823068a0f122d51 (origin/main)
Date:   Wed Feb 10 15:28:42 2021 +0900

    first commit

// 3rd コミットが削除されて、2nd にHEADの状態の戻りましたね。    

これで、何回でも練習できますね。前回もお伝えした通り、前進だけでなく、後退も同時に覚えて置きましょう! そうすることで理解も深まりますし、いつか、どこかで失敗したときに、冷静、確実に、元に戻せるようなりますよ~(^^)

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

https://zenn.dev/shiozumi/articles/0a0c0c4fa53c3b
https://twitter.com/esmile2013
脚注
  1. エラーが出て消せないときは、git branch -D sub で強制削除が可能です。 ↩︎

  2. --hard 以外に、--soft なども指定できますが、説明は、又、後ほど! ↩︎