今まで何となく使ってきたgitについてですが、根本的な考え方が曖昧なので、本記事でまとめたいと思います。

この記事は、gitを何となく使っているけど基礎的な部分を理解したい方向けの記事です。
Gitとは
Gitとは、コード管理ツールです。昨日まで動いていた部分が今日色々つき足していたら動かなくなったので、昨日のバージョンに戻したい、、という場合に巻き戻すことができたりします。
GitHubを使えば、自分の書いたコードをインターネット上に置くことができ、世界に公開することが可能になったり、友人にコードをシェアすることができるので、共同作業ができるようになります。
Gitの概念
やっぱり、公式が一番わかりやすい。
https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell
コミットとは
コミットとはスナップショットのことであり、コミットはそれぞれツリーを持っていて、ツリーはブロブ(更新したファイル)の情報を持っている。

コミットが増えていくと・・・

矢印の向きが新しいコミットから古いコミットに向く意味がよくわかっていなかったのですが、親情報をポイントしているので、新→古になるんですね。
ブランチとは
直訳すると枝ですが、その名の通り複数に枝分かれさせて、ブランチごとに作業が可能となります。

こちらの図では、testブランチとmainブランチが#962ceコミットをポイントしています。HEADというのは、今現在作業しているブランチを指します。HEADの概念も大切なので覚えておきましょう。
mergeの概念
mergeとは、ブランチで作業していたものを別のブランチと合体させたいときに使います。mergeには2つの種類があります。
fast-forwarded merge
比較的簡単にmergeが可能な場合です。


3-way merge
少し複雑な場合のmerge方法です。


※C6に入らない->C5に入らないですね。
リモートリポジトリがある場合の概念
ローカルで開発したものを、他の仲間にコードシェアしたい場合に使うのがリモートリポジトリ(たとえばGitHub)です。
remote tracking branchとは
リモートにあるブランチの参照のことをremote tracking branchと呼びます。見た目としては、origin/mainやorigin/testなど。

remote tracking branchはただの参照なので、そのブランチを修正したりすることができません。修正する場合はcheckout -bコマンドを使いましょう。
たとえばローカルにtestブランチのremote tracking branchがあるとした場合。
$ git checkout -b test origin/test
testブランチがローカルに作られ、-bオプションでHEADをtestブランチにポイントしてくれます。
pullとfetchの違い
何気なく使っていたpullですが、細かいことを理解できていなかったのでまとめます。
fetchとは
remote tracking branchを更新してくれます。以下の図では、fetchすることで、新しくC2というコミットを指すorigin/mainが更新されます。origin/mainはただのremote tracking branchですので、その修正をローカルブランチであるmainで取り込みたければ、mainの位置を更新しなくてはいけません。

更新するためには、git merge origin/mainをすることで、mainのポイントをC2になるようにします。こうすることで、mainブランチでC2の修正が取り込まれました。

pullとは
上記のfetch, mergeを一気にやってくれるコマンドになります。git pullすることで、(1) remote tracking branchを更新してくれ、(2)mergeしてくれることで、mainブランチが常に最新のコミットを指すようになるんですね。
tracking branchとupstream branchとは
この2つもよく出てきて、違いがいまいちわかりません。
tracking branch
remote tracking branchから、ローカルに作ったブランチのことをtracking branchと言います。
$ git checkout -b test origin/test
この場合でいう、testブランチです。
upstream branch
この時、tracking branchがトラックしているブランチのことをupstream branchと言います。上記の場合でいう、リモートリポジトリに存在するtestブランチそのものです。
ふ〜ん、程度に覚えておくといいのかもしれません。
まとめ
仕事で使っているgitですが、基本的なところを理解できていなかったので、自分のわかっていなかった部分を中心にまとめてみました。だいぶ理解は深まったように思います。次回はrebaseについてまとめたいなと思います!

にほんブログ村に参加しております!よろしければクリックお願いします 🙂
にほんブログ村


コメント