ブランチを統合する(Gitを知ろう)

Gitについて学習する連載の6回目です。前回の記事はこちらになります。 hirocom777.hatenadiary.org

ブランチを統合する

前回は、ブランチで作業している領域を分岐してみました。ちょっとした確認をしたい時に便利ですよね。

f:id:HiroCom777:20210704165531j:plain

今回は、分岐した内容を修正して大元に反映させてみましょう。

お試しブランチで修正してみる

ブランチを使えば、できるかどうか判らないけれどちょっと試してみたい。そして、もし上手くいったら大元に反映したい。等ということができます。上手く行かなった場合には分岐を取り消して元に戻ってしまえば大元は無事と言う訳です。

それでは前回の状態から進めていきたいと思います。以下のような状態です。コミットを3回実行していて、ファイルは2つ(File_1.txt,File_2.txt)、ブランチによる分岐はありません。

新しくブランチ'branch-test'を作って、そちらに切り替えましょう。

この状態で、ファイル(File_3.txt)を追加してみます。ファイルの中は以下の様にします。

Good by!!

以下のような状態になりました。

f:id:HiroCom777:20210704170156j:plain

ブランチを切り替えるときの注意

さて、この状態で一度masterブランチに戻ってみましょう。masterブランチではファイルは2つでした。

f:id:HiroCom777:20210704170415j:plain

あれ?masterブランチでもファイルは3つになっています!!実を言うと、ファイルを変更、追加した後にコミットをしないで他のブランチに切り替えると、切り替えた先のブランチに変更、追加内容が移動してしまいます。このままでは危ないのでbranch-testに戻ってコミットを実行しましょう。記録内容は以下の様にしました。

Gitの使い方を学習します_04

ブランチをコミットしました
f:id:HiroCom777:20210704170803j:plain

この状態でブランチをmasterに切り替えると・・・今度はファイルが2つになっています。

f:id:HiroCom777:20210704170954j:plain

ブランチを切り替える前には、必ずコミットしている状態かどうかを確認しておきましょう。

マージしてみる

それでは分岐してファイルを追加したブランチbranch-testをmasterに統合(マージ)してみましょう。 masterに切り替えた状態で、以下を入力しましょう。

git merge ブランチ名

以下のような画面になります。

f:id:HiroCom777:20210704171629j:plain

ちゃんとマージできたようです。branch-testでコミットした内容も記録されています。

衝突したらどうする?

上の例ではファイルを追加しただけなのですが、ファイルを修正した場合でも処理は同様です。でも、masterとbranch-testで同じファイルに異なる変更してしまった場合しどうなるのでしょうか?試してみましょう。

まず、masterブランチに切り替わっていることを確認してFile_3.txtの内容を以下の様に書き換えます。

Good by!!
See you again!!

この内容をステージングしてコミットしましょう。記録内容は以下の様にしました。

Gitの使い方を学習します_05

masterのFile_3.txtを編集しました
f:id:HiroCom777:20210704172139j:plain

次にbranch-testブランチに切り替えて同様にFile_3.txtの内容を以下の様に書き換えます。

Good by!!
See you later!!

こちらもステージングしてコミットします。記録内容は以下の様にしました。

Gitの使い方を学習します_06

branch-testのFile_3.txtを編集しました
f:id:HiroCom777:20210704172531j:plain

今度はmasterをbranch-testにマージします。

f:id:HiroCom777:20210704173014j:plain

すると、あれ?なんかおかしい。これはコンフリクト(衝突)という状態です。masterとbranch-testでFile_3.txtの内容を変えてしまったのでこんなことが発生しているのです。File_3.txtをメモ帳などで開いてみると以下の様になっています。

Good by!!
<<<<<<< HEAD
See you later!!
=======
See you again!!
>>>>>>> master

2行目は'See you later!!'と'See you again!!'どっちが正しいの?と言う訳です。このままではまずいので、今回のマージはなかったことにしましょう。以下を入力すると、直前のマージが無かったことになります。

git merge --abort

さらに、branch-testのFile_3.txtの2行目'See you later!!'をなかったことにしたいと思います。'Gitの使い方を学習します_04'のコミットに戻ればいいですね。コミットIDで任意のコミットに移動する方法を以前ご紹介しました。今回もそれでいいのですが、ひとつ前のコミットに戻るということで以下を入力すればいいと思います。

git reset --hard HEAD~1

最後の数値を変更すると、指定した回数だけ前のコミットに戻れます。

f:id:HiroCom777:20210704173336j:plain

実行してFile_3.txtを確認すると

Good by!!

となっています。この状態でもう一度masterとマージしてみましょう。

f:id:HiroCom777:20210704175451j:plain

今度は上手くいったようです。branch-testのFile_3.txtは以下の様になりました。

Good by!!
See you again!!

次回はおさらい

いかがでしたか?ここまでご紹介した内容を繰り返し練習すると、Gitの操作方法が理解できるようになると思います。次回は今までのおさらいです。お楽しみに!!

hirocom777.hatenadiary.org

Gitを知ろうの連載記事はコチラからどうぞ