LoginSignup
3
1

More than 3 years have passed since last update.

今度こそ挫折しない git 入門 第2回

Last updated at Posted at 2019-12-22

こんにちは、バカンのソフトウェアエンジニアの垣野内です。

この記事はバカン Advent Calendar 2019の22日目の投稿です。
前回に引き続きgitの入門記事をおとどけします!今回はブランチについての解説です。
ブランチは、覚えるコマンドは少ないのですが、慣れるのに少し時間がかかるかもしれません。

今回もこれでもかというくらいスクショをつけておきました!
コマンドでの入門をおすすめするのは、第一回に述べた通りです。
「なんでコマンドなの?もう令和だよ?」と言いたくなる気持ちをグッとこらえて、コマンド練習までぜひ一緒にやってみてください!

ブランチとはどんなものか

前回のコマンド練習その1のところで、git log というコマンドを使うことでコミットの履歴が見れることを確認しました。
↓再掲
git_branch_10.png

git log --graph --all というオプションをつけて実行すると、もう少しグラフィカルに見れます↓
(※ グラフィカルに見る方法はいくつかあります1)
git_log_graph.png

コミット1つ1つがアスタリスク * で表され、それらがつながったグラフが左端に表示されました。
このグラフをコミットグラフと呼びます。
(おそらく公式な用語となってるわけではないですが、よく使われる言葉です)

そして、ブランチとは、特定のコミットからコミットグラフを枝分かれ(まさに”ブランチ”)させるための仕組み です。コマンド練習その2のところで解説しますが、ブランチを作ったときのコミットグラフを先にお見せするとこんな感じになります↓
このコミットグラフを表示させ、そして理解するところまでが今回のゴールです!
git_branch_9.png

ブランチを使うと何が嬉しいのか

大きく3つ嬉しいことがあると筆者は考えてます:

1. 枝分かれさせることで(ブランチを作ることで)、”本流”の方にうっかり影響をあたえずにすむ
2. 複数人で並行して作業ができる
3. コミットのまとまりを作ることができる

※"本流"というのはあくまで比喩です。枝分かれの前の「木の”幹”」と言ってもいいでしょう。具体的にはコマンドのところで理解を深めてください!

よくわからない人も、やはりコマンドを叩いてみることでわかるかと思いますのでやってみましょう!

コマンド練習その2

さて、まずはブランチの一覧を確認するコマンドからいきましょう。
「え?もうブランチがあるの?」と驚かれたかもしれませんが、実は、git initした時点で、masterブランチという名前のブランチがデフォルトで作られるのです。

ブランチの一覧(git branch)

では、git branch とたたいてみましょう!
git_branch_1.png
無事にmasterブランチの存在が確認できたでしょうか?
git log のところですでに見えていたHEAD -> mastermaster とは、実はmasterブランチのことだったんですね。(上図↑赤枠)

HEAD とは現在の作業ディレクトリのことです。(作業ディレクトリについては第一回 へ)
つまり、「現在の作業ディレクトリは master ブランチを向いていますよ」ということです。
(ここの説明はブランチを複数作ってみたら理解できると思うので、わからなくても先に進んでみてください!
操作的な理解のあとに意味的な理解がついてくると思います。)

ブランチを新たに作る(git branch <ブランチ名>)

次に、ブランチを作ってみましょう。git branch <ブランチ名>で作ることができます。
ここでは、branch_test_1 というブランチ名にしてみます。つまり、git branch branch_test_1 とたたいてみましょう!そして、もう一度git branchと叩いてブランチの一覧を確認しましょう!
git_branch_2.png
↑上のように、branch_test_1 というブランチが作成できたでしょうか?
左のアスタリスクは、「作業ディレクトリが現在いるブランチ」を表しています。
現在”いる”という表現がわかりにくいかもしれませんが、これも進めていくうちにわかるかと思います。

ここで、git log --graph --allも確認しておきましょう。
git_branch_3-2.png
赤枠の部分の表示が少し変わりましたね。
ブランチが2つあり、HEADは依然 masterブランチを向いています。

ブランチを切り替える(git checkout <ブランチ名>)

ブランチには「切り替え」という考え方があります。
今、masterブランチに”いる”ことを確認しましたが、branch_test_1ブランチに”切り替え”てコミットをすることで、masterブランチの状態を全く汚すことなくファイルの変更をすることができます
(作業ディレクトリをまるっとコピーして、別名で保存して作業しているのと似ています。しかし、”本流”に合流させる時の作業がはるかに簡単です)

実際にやってみれば意味がわかるでしょう。
まず、git checkout <ブランチ名>とたたき、ブランチを切り替えます。今回はbranch_test_1 に切り替えたいので、git checkout branch_test_1 とたたきます。
そして、git branchをたたき、切り替わっていることを確認しましょう!
git_branch_4.png

↑上の図のようになったでしょうか?
ここで、git log --graph --allも確認しておきましょう。
git_branch_5.png
ブランチを切り替えたので、HEADbranch_test_1ブランチを向いています。

切り替えたブランチでコミットしてみる

切り替えたbranch_test_1ブランチにて変更を加えてみましょう!
前回の復習ですが、「変更して、add して、commit する」 という流れですよ!
ここでは、”git third test on branch_test_1” という文字列を加えてみました。
Screen Shot 2019-12-23 at 1.23.07.png

コミットまでやったら、再びgit log --graph --allでコミットグラフを確認してみましょう。

git_branch_6.png
HEAD -> branch_test_1 のコミットはmasterブランチのコミットよりも先にいますね。2

もう一度何か変更を加えてみましょう!
ここでは、”git fourth test on branch_test_1” という文字列を加えてみました。
Screen Shot 2019-12-23 at 1.39.20.png

くどいようですが、コミットまでやったら、再びgit log --graph --allでコミットグラフを確認してみましょう。

git_branch_7.png
HEAD -> branch_test_1 がいるコミットがさらにさきに進んでいることがわかります。

もとのブランチに戻ってみると...???

ここでもとのmasterブランチに戻ってみましょう。git checkout masterです。
そして、git log --graph --allを打ってみましょう。
git_branch_8.png
masterブランチに切り替えたので、HEADの向き先が masterブランチを向きましたね。
ここで、変更を加えてきたファイルも見てみてください。
Screen Shot 2019-12-23 at 1.46.12.png
”git third test on branch_test_1” という文字列や ”git fourth test on branch_test_1”という文字列がきれいになくなっていませんか?
なくなっているのではなく、作業ディレクトリがこの時のバージョンに戻ったのです!

これで、ブランチの一覧のところで説明した HEAD -> master の意味がわかったのではないでしょうか?
また、ブランチを新たに作るのところで説明した、「作業ディレクトリが現在いるブランチ」という説明もわかってきたかと思います。
ブランチを切り替えて作業をすることで、別名フォルダや別名ファイルを作ることなく複数のバージョンを共存させることができるのです!
そのため、複数人での並行作業もやりやすいということですね!

これで、ブランチを使うと何が嬉しいのかのところのメリット1とメリット2についても回収したつもりです。(メリット3については最後に軽く触れます)

もとのブランチでコミットすると...???

もとのmasterブランチで1つコミットしてみましょう!
ここではtest2.txt というファイルを新たに作り、”git fifth test on master” という文字列を加えました。
Screen Shot 2019-12-23 at 1.58.17.png

コミットまでやったら、いつもどおり、git log --graph --allでコミットグラフを確認してみましょう!

git_branch_9.png

まさにツリーのようにブランチが生えているようすが表示されましたね!:tada::tada::tada:
これでgitのブランチに関しても入門できたと言ってよいでしょう!おつかれさまでした!

マージ(概念だけ)

最後に、後回しにしていたブランチを使うと何が嬉しいのかのところのメリット3について軽く触れたいと思います。
すぐ上のコミットグラフにおける、branch_test_1ブランチでの2つのコミットを本流のmasterブランチへ合流させることができます。これをマージと言います。
branch_test_1ブランチをmasterブランチにマージする」という言い方をします。
(gitにおけるマージには明確に方向があるということに注意。「AとBをマージする」のではなく、「AをBにマージする」という考え方です)

これによって、masterブランチに一気に2つのコミットが取り込まれ、masterブランチのtest1.txtにもも”git third test on branch_test_1” という文字列や ”git fourth test on branch_test_1”が現れるようになります!
そして、この2つのコミットを戻したかったら、このマージを取り消せばよいのです3

マージのコマンドについては、ググってぜひやってみてください!


おさらいです。以下のコマンドの操作とともに、ブランチの有用性が理解いただけたかと思います。
- git branch(引数なし)(ブランチの一覧を表示)
- git branch <ブランチ名>(ブランチの作成)
- git checkout <ブランチ名>(ブランチの切り替え)

おわりに

git シリーズはこれでおしまいです。入門者の方が挫折しないよう、内容をしぼり、かつ丁寧なコマンドの解説を試みました。
もちろんこの2回の記事で紹介できてないコマンドもいくつもあるのですが、基本的な考え方が理解できれば適宜ググっていけるのではないかと思っています。

参考文献

  • 入門Git 絶版となってしまったようですが、個人的にはとても好きな本です。合う/合わないがとてもはっきりわかれる本だと思います。
  • Git の仕組み (1) この記事を読んで Git って面白いなと思ったのでした。ものごとの仕組みに興味のある方は、コマンドに慣れてきたころに読んでみると面白く読めると思います。
  • サルでもわかるGit入門
  • https://twitter.com/098ra0209/status/1163424568544907265 最近 twitter で見つけたものです。ポップな絵とともに用語の整理ができてよいですね。

参考リンク


  1. VSCode や IntelliJ などのエディタのプラグインを使うという方法、SourceTree などの git のGUIクライアントを使うという方法などです。ちなみに筆者は、以下のように、git log --graph --all --format=\"%x09%C(cyan bold)%an%Creset%x09%C(yellow)%h%Creset %C(magenta reverse)%d%Creset %s\" というコマンドを git の alias に登録して、git treeと打てばこれを呼び出せるようにしています。グラフィカルかつブランチが見やすいので気にいっています。.gitconfig というファイルがあると思うので、そこに全く同じように書けばよいです。git_config.png 

  2. 本編に書くか迷いましたが、git では、コミットへの参照という形でブランチが実現されています。コミットをするたびに、最新のコミットを追いかけていくので、動く参照です。 

  3. gitは、マージも1つのコミットとして表現されます。マージを消すとはこのコミットを”取り消す”ということにほかなりません。さらについでに補足すると、git における「コミットんぼ取り消し」には2種類あります; 1.そのコミットをなくすというコミットをする(revert) 2.本当にそのコミットをなかったことにする(reset) それぞれググってみてください! 

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1